Put meats, carrots, celery, half the onions, and bouquet garni into a large stockpot. Add 10 cups cold water and bring to a boil over high heat. Reduce heat to medium and simmer, skimming any foam and fat that rise to the surface, until meats are tender, about 2 hours. Strain stock into a large bowl, discarding vegetables and bouquet garni, and set aside. Remove and discard bones, fat, and sinew from meat, coarsely shred meat, and set aside.
Put potatoes into a large pot, cover with cold water by 2"–3", and add a generous pinch of salt. Bring to a boil over medium-high heat, reduce heat to medium, and gently boil until potatoes are tender when pierced with the tip of a knife, about 30 minutes. Drain potatoes, then press through a potato ricer or mash with a potato masher in a large bowl. Add hot milk, 16 tbsp. of the butter, garlic, nutmeg, and salt and pepper to taste and beat with a wooden spoon until smooth. Adjust seasonings, cover to keep warm, and set aside.
Preheat oven to 400°. Chop remaining onions. Melt 2 tbsp. of the butter in a large skillet over medium heat. Add onions and cook until soft, about 8 minutes. Sprinkle flour over onions and cook, stirring constantly, for 1–2 minutes. Reduce heat to medium-low, stir in 3⁄4 cup of the reserved beef stock (save remaining stock for another use), and cook, stirring frequently, until onion mixture is browned and very thick, about 15 minutes. Set aside.
Grease a 2-quart baking dish with 1 tbsp. of the butter; set aside. Add onion mixture to shredded meat, season to taste with salt and pepper, and mix well. Spread 4 cups of the mashed potatoes in bottom of baking dish; cover with chredded meat mixture. Spread remaining potatoes on top and sprinkle with bread crumbs (if using). Melt remaining 6 tbsp. butter (if using) and drizzle over bread crumbs. Bake until golden brown on top, 20-30 minutes. Let rest briefly before serving.