Melt the butter in a large Dutch oven or pot over medium heat. Add onions and cook until tender, about 5 minutes. Whisk in the flour completely and cook for 1-2 minutes, whisking constantly. Slowly whisk in half-and-half until smooth. Increase heat to medium-high. Cook, stirring often until slightly thickened.
Add chicken broth, paprika, nutmeg, salt, pepper, and bay leaves. Bring to a simmer then reduce heat to medium-low.
Add broccoli and carrots then stir to combine. Continue simmering for 10-15 minutes or until all vegetables are tender. Discard bay leaves.
Remove about half of the vegetables and place in a separate bowl. Use an immersion blender or blender to puree soup until smooth. Stir vegetables back into the soup. Add 3 cups of cheese and stir until melted.
Ladle into bowls and garnish with remaining cheese.
Notes
Note: 1. You can puree all of the soup for a completely smooth consistency or leave the soup chunky. It's up to you! I prefer to do half and half as described above.2. If the soup turns out too thick, add a little water to thin it out.