Chop the broccoli, reserving the stems for the base of the soup. Use a peeler to remove any thick or woody pieces from the stems and chop the broccoli stems into 1/4 inch or smaller pieces. These are used for thickening the soup along with the potatoes, onion and carrots.
In a large soup pot or Dutch oven, heat the olive oil then add the chopped onions, chopped broccoli stems, chopped carrots, and diced potato. Cook for about 7-9 minutes until the vegetables are softened.
Add the minced garlic, salt, pepper and smoked paprika. Stir and cook until the garlic is fragrant, about 1 minute longer. Add the chicken broth and water and bring to a boil. Reduce the soup to a simmer and allow the veggies to cook until tender about 15 minutes.
Meanwhile, in a separate saucepan, heat the butter until melted. Add the flour and whisk vigorously until combined. Slowly add the cream while stirring until a smooth roux is formed. Add the grated cheese and continue stirring until the cheese is melted and creamy. Remove from the heat and set aside.
Reduce the heat for the soup to low and use an immersion blender to gently puree the veggies in the soup pot and thicken the soup. If you do not have an immersion blender, remove the soup from the heat and place 4-5 ladles full into a blender. Puree the soup and add it back to the soup pot. It may not appear totally thick at this point, but it will thicken when the roux and cheese are added to the soup.
Place the soup back on the stovetop over medium heat. Add the broccoli florets and cook for another 5 minutes until the florets are bright green. Add the roux to the soup and stir to incorporate. Cook for a few more minutes until the soup is rich and creamy.
Taste for seasoning and creaminess and adjust to your liking. If you want it more creamy - add more cream, half n half or grated cheese.