In a soup pot or Dutch oven, melt the butter over medium heat. Add the dice onion and stir to coat. Cook, stirring occasionally, for 4-5 minutes until onion is softened. In a small dish, stir together the flour, 1 teaspoon of the salt, and the black pepper until mixed. Add and whisk the flour mixture into the butter and onions a little bit at a time, whisking continuously until well combined. Slowly add a bit of the half and half and whisk it into the flour mixture until combined. Continue to add and whisk in the half and half a little at a time until it is all combined.
Add some of the vegetable stock and continue to whisk the mixture until all the stock is added and all ingredients are well combined. Add the remaining ½ teaspoon of salt and the ¼ teaspoon of garlic powder. I also added a few twists of freshly cracked black pepper at this step. Cover the pot and bring the mixture to a simmer. Uncover and reduce the heat to medium-low (medium on my stovetop is a 5, so I had this at a 3) and allow the soup to cook for about 20 minutes, stirring occasionally.
Add the broccoli florets and shredded carrots and stir in to combine. Continue to cook for another 15-20 minutes until the vegetables are tender. Optional: At this point I suck my immersion blender in the pot and blended maybe 1/3-1/2 of the soup. Alternately, you could just put some of the soup in a regular blender or skip this step entirely, depending on how you prefer the consistency of your soup. I do recommend not pureeing the entire pot, because it’s nice to have some full broccoli florets in there.
Increase the heat to medium and add the shredded cheeses (you may reserve a bit at this point for topping the soup if desired). Whisk the cheese into the soup until fully melted and combined.