Brown the meat: Heat a dutch oven or large, heavy bottomed pot over medium-high to high heat. Pat lamb cubes dry and season generously with salt and pepper. Add 2 tablespoons oil to preheated pot, followed by meat. Cook undisturbed until well-browned on first side. Flip and brown on remaining sides, about 12-15 minutes total. Remove lamb and set aside, reserving excess oil in pot.
Cook onions: Reduce heat to medium and add onions to pot. Season with salt. There should be enough oil to cook the onions, but add more, if needed. Continue to cook over low to medium heat for a total of 25-30 minutes or until soft and lightly caramelized.
Add aromatics & tomatoes: Add ginger, garlic and all spices to pot. Toast in oil for about 30-60 seconds, being cautious to avoid browning the garlic. Add tomatoes and season with salt. Add back lamb. Stir in about 1 ½ cups water or enough to cover meat.
Simmer curry: Bring curry to a simmer and cook over low to medium-low heat for about 2-2 ½ hours or until lamb is tender and sauce is flavorful. Add additional water while cooking, if needed, if sauce becomes too thin. Alternately, if sauce is too thin, simmer curry until it thickens to desired consistency.
Fry eggplant: Heat a large nonstick pan over medium-high heat. Add ¼ cup of oil, followed by eggplant. Toss to combine. Do not salt immediately. Brown eggplant on all sides, then season generously with salt. Cook until well-browned and tender, adjusting heat as needed, for a total of about 12-15 minutes. Stir into curry after lamb is tender. Taste and adjust seasoning. Add a pinch of sugar to balance flavors, if desired.
Make yogurt sauce: Combine yogurt, garlic and lime juice in a bowl. Season with salt. Top with lemon zest and a drizzle of olive oil.
Serve: Distribute curry among serving bowls, top with cilantro and yogurt, and serve with warmed naan bread or rice, and lime wedges. Enjoy.