Preheat the oven to 350°. Put the onions in a small baking dish, root ends down, and rub with oil. Add 1/2 inch of water to the dish. Cover with foil and bake for about 1 1/2 hours, until tender. Let cool slightly.
Meanwhile, heat a large skillet. Add the spinach in batches, tossing until wilted. Transfer to a colander and squeeze out the water. Coarsely chop the spinach.
In the same skillet, cook the lamb over moderately high heat, breaking it up, until no pink remains, 3 minutes. Pour off all but 1 tablespoon of the fat and add the ancho chile powder and cinnamon. Cook over moderately high heat, stirring, for 1 minute. Stir in the spinach. Transfer the lamb filling to a large bowl. Stir in the bread crumbs, Gruyère, 1/4 cup of the beef broth and 1/2 cup of the crushed tomatoes.
Cut 1/2 inch off the top and bottom of the baked onions. Separate the layers, trying not to break them. You will need 10 onion cups: some large, some medium and 2 small. Finely chop enough of the onion scraps to make 1/2 cup; fold into the lamb filling and season with salt and pepper.
Stand the onion cups in a buttered medium baking dish. Season the insides with salt and fill with the lamb.
In a large skillet, combine the cream with the remaining 3/4 cup of beef broth and 1/2 cup of tomatoes and bring to a boil. Pour the sauce over and around the onions.
In a bowl, combine all of the ingredients. Mound the topping on the onions. Cover with foil and bake for 40 minutes, until hot. Uncover and increase the oven temperature to 425°. Bake for 5 minutes, until the topping is crisp. Let rest for 5 minutes before serving.