Pre-heat the oven to 220°C (425°F).
Place the lamb in a large pot or roasting tray. Pierce the flesh with the tip of a knife about 15 times.
Pour the marinade over the lamb. Rub the meat all around and season with salt and pepper. Finally drizzle more olive oil on the lamb and around.
Place the lamb in the oven uncovered. Roast for 15-20 minutes, you want the top of the lamb to be brown roasted but not burned.
Reduce the heat to 150°C (300°F). Add the onion and garlic to the roasting tray and leave the lamb to cook for 3 hours covered with a tight lid or foil.
While the lamb is in the oven, once in a while check if the lamb is cooking properly. The sound is sometimes enough to let you know if it is slow cooking the right way. If you hear a sizzle, the temperature is too high if you hear nothing it is too low.
After 3 hours you should be able to peel the meat away with a fork, if not the lamb needs longer.
When the lamb is cooked, take it out and remove the lid. Transfer the cooking juices in a pot, remove some of the fat from the top and reduce about ¾ to gravy consistency.
Roast the lamb for 5-10 minutes until you have a nice roasting colour. Remove the lamb and let it rest for 10 minutes before serving.