Heat oil and onion in a saucepan over a medium-heat. Cook until the onion is caramelised - for around 25 minutes - then, using a slotted spoon, transfer the onion to a bowl.
Discard all but ¼ cup of oil from the pan.
Cook the lamb, turning as needed, until browned - for around 8–10 minutes.
Stir in the reserved garam masala, cayenne, garlic, ginger paste and salt, and continue to cook for 1–2 minutes.
Add three cups of water and bring to the boil.
Reduce the heat to medium-low and continue to cook, covered, for around 5 1⁄2–6 hours, until the lamb has fallen off the bone.
Using tongs, transfer the lamb to a bowl and keep warm.
Stir the flour, ghee and ¼ cup of water together in a bowl and add to the pan. Cook for around 15 minutes, until thickened.
Return the lamb to the pan.
Serve with the reserved onion, julienned ginger and, if you like, the coriander, lemon or lime wedges, chillies, and naan bread.