Caramelize the onions. Heat 1 tbsp olive oil and 2 tbsp butter in a large skillet over medium heat.
Add sliced onions, a pinch of salt, and cook, stirring often, for 25–35 minutes until deep golden and jammy. If they start to catch, lower the heat and splash in water to deglaze.
Boost the flavor base. Stir in garlic and thyme for 1 minute. Add wine or sherry to deglaze, scraping up brown bits.
Let it reduce by half. Transfer the onions to a bowl and wipe the skillet if needed.
Make the meatball mix. In a large bowl, combine ground beef, ground pork, eggs, almond flour, Parmesan, onion powder, 1 tsp salt, and 1/2 tsp pepper. Mix gently until just combined.
Do not overwork—this keeps the meatballs tender.
Form the meatballs. Shape into 18–22 golf ball–sized meatballs. Chill in the fridge for 10–15 minutes to help them hold together.
Sear the meatballs. Heat 1–2 tbsp olive oil in the same skillet over medium-high. Brown meatballs in batches on all sides, 5–7 minutes total.
They don’t need to be cooked through yet. Transfer to a plate.
Build the sauce. Return caramelized onions to the skillet. Add beef broth and Worcestershire.
Bring to a simmer. Taste and adjust salt and pepper. For a slightly thicker texture, simmer 5–8 minutes to reduce.
Finish cooking the meatballs. Nestle meatballs into the onion sauce.
Cover and simmer on medium-low for 8–10 minutes, or until cooked through (165°F internal temperature).
Add the cheese. Sprinkle Gruyère over the meatballs. Cover until melted and bubbly, 2–3 minutes. For extra browning, transfer to a broiler-safe pan and broil briefly, watching closely.
Garnish and serve. Top with chopped parsley.
Serve over cauliflower mash, roasted green beans, sautéed spinach, or zucchini noodles. Spoon plenty of onion gravy over each serving.