Blend 4 tablespoons water, garlic and ginger into a smooth paste in a blender.
Heat oil in a wide, heavy saucepan over medium heat. Cook lamb in batches until browned, about 5 minutes per batch. Transfer to a bowl.
Combine cinnamon sticks, cardamom, peppercorns, cloves and bay leaves in the same saucepan. Stir once and cook until cloves swell and bay leaves change colour, 2 to 3 minutes. Add onions; cook and stir until browned, about 5 minutes. Add the ginger-garlic paste; stir for 30 seconds. Add paprika, cumin, coriander, cayenne and salt. Cook until fragrant, about 30 seconds.
Add the browned lamb and its juices into the pot. Stir for 30 seconds. Add yogurt, 1 tablespoon at a time, stirring well after each addition. Cook and stir for 3 minutes. Pour in water; bring to the boil, scraping browned bits off the sides and bottom of the saucepan. Cover and reduce heat to low. Simmer until meat is tender, about 1 hour, stirring well every 10 minutes.
Remove lid, increase heat to medium and reduce some of the liquid if desired. Spoon accumulated fat off the surface; stir in garam masala and black pepper before serving.