Warm the butter and oil in a large skillet over medium-low heat. Add the diced onion, and toss with a spatula to coat. Reduce the heat to "low," cover the skillet, and let the onions sweat until soft -- 5-7 minutes.
While the onions are cooking, cover the potatoes with water in a saucepan, and bring them to a boil. Then reduce the heat to a simmer, and let cook until fork tender -- about 20 minutes. Drain off water and mash the potatoes thoroughly.
When the onions are definitely soft (and while the potatoes are still boiling), add the ground meats to the skillet. Over medium-low heat, break up the meat with a stout spoon or flat spatula. Cover the skillet, and continue cooking the meat, breaking it up with the spoon or spatula from time to time, until done or almost done -- 10-15 minutes. Remove some of the fat if you wish. Then stir in the holiday spices and the beef stock, and let the mixture simmer, uncovered, until liquids in the pan have mostly evaporated -- about 30 minutes.
Off heat, add the mashed potatoes to the meat mixture. Stir will to combine. Then let the mixture come to room temperature.