Caramelize onions: heat butter and oil in a large skillet over medium-low. Add onions with a pinch of salt and cook 20 to 25 minutes, stirring every 4 to 5 minutes, until deeply golden and jammy.
Brown the beef: push onions aside, raise heat to medium-high, add ground beef and cook undisturbed 2 minutes, then break apart and cook until fully browned, about 4 to 5 more minutes. Drain excess fat if needed. Stir beef and onions together.
Add aromatics: stir in garlic and tomato paste. Cook 1 to 2 minutes until paste darkens slightly and garlic is fragrant.
Build the sauce: add beef broth, Worcestershire, thyme, onion powder, and pepper. Simmer uncovered 5 to 7 minutes until glossy and thick. Stir in balsamic vinegar if using. Taste and season with salt.
Broil with cheese: preheat broiler. Place toasted bun bottoms on a baking sheet, spoon filling over each, top with grated Gruyère. Broil 2 to 3 minutes until melted and lightly golden. Watch closely.
Serve immediately with bun tops placed on. Best eaten hot while cheese is still stretchy.