Make the curry first by combining the toasted spices, cloves, star anise, cardamom, lime leaves, red pepper flakes, nutmeg, and turmeric in a spice grinder or clean coffee grinder, and grind them until you have a very fine powder.
Heat a large Dutch oven or other heavy ovenproof pot over medium high heat and add the olive oil. When the oil just begins to smoke, add the shallots (or onions) and garlic and cook, stirring often, until they're deep brown, about 10 minutes. Add the ground spice mixture, cinnamon stick, and ginger and cook, stirring constantly, for 3 minutes. Stir in the tomatoes and salt, stirring frequently, until most of the liquid has evaporated and the mixture looks quite dry, about 15 minutes.
Stir in the cilantro, citrus peel and juice, and pineapple juice, then remove from the heat and set aside.
Preheat the oven to 350 F.
In a large skillet, heat 2 tablespoons of olive oil over high heat until smoking; meanwhile, season the lamb with lots of salt. In batches, brown the meat all over, 12 to 15 minutes per batch. As the pieces finish browning, use a slotted spoon to transfer them to the Dutch oven with the curry mixture. Brown the following batches in all the nice fat remaining in the pan, transferring the pieces to the Dutch oven as they are done, and then discard the fat.
Give the lamb pieces a good stir to coat them in the curry mixture, cover the pot, and put it in the oven. Cook the lamb 1 ½ hours, stirring now and then.
Reduce the heat to 250 F and let it go until the lamb is fork tender but not totally falling apart, another hour or so. Serve over rice and garnish with cilantro leaves, if you like.