Place the broccoli and chicken broth in a large dutch oven and bring to a boil. Simmer until broccoli is crisp-tender, about 5 minutes. Do not overcook.
Remove the broccoli with a slotted spoon and place in a bowl. Set aside. Reserve the broth in the pot.
In another large pot, melt the butter over medium heat. Add the onions and garlic and cook until tender, but not brown, 3-5 minutes. Stir in the flour.
Gradually whisk the reserved broth into the butter and flour mixture. Bring to a simmer and cook until slightly thickened. Add the reserved broccoli.
Stir in the heavy cream and simmer for another 3-5 minutes. Let the soup cool slightly, then remove soup to a blender and puree (you may have to work in batches). Alternately, you can blend the soup right in the pot with an immersion blender. Puree as much or as little of the soup as you would like to reach desired consistency.
Return the pureed soup to the pot and bring to a simmer. Season with salt and pepper, to taste.
Add the cheeses and continue cooking until cheese is melted. Serve immediately with additional cheese for garnish, if desired.