Melt butter in a large Dutch oven over medium heat. Add sliced onions and cook uncovered for 25-30 minutes, stirring frequently, until deeply golden and caramelized. The onions should smell sweet and smell slightly toasted, not burned.
Pour in balsamic vinegar and scrape the bottom with a wooden spoon to release all caramelized bits. Add garlic powder, bay leaf, and fresh thyme, stirring to coat the onions. Cook for 1-2 minutes until fragrant.
Add chicken broth, white wine substitute, carrots, and celery to the pot. Bring to a boil, then reduce heat and add chicken pieces gently. Simmer for 20 minutes until the chicken is cooked through and tender.
Remove chicken pieces carefully with tongs and set aside on a cutting board. Prepare a slurry by mixing cornstarch with 2 tablespoons cold water, then whisk it into the simmering broth to thicken. This creamy french onion chicken soup base should thicken noticeably within 2-3 minutes.
Stir in heavy cream and season with salt and pepper to taste. Return chicken pieces to the pot and fold in shredded Gruyère cheese until melted and smooth. Simmer gently for 3-5 minutes until the cheese is completely incorporated and the soup reaches serving temperature.