Preheat oven to 425 degrees F. Line a baking sheet with a silicone mat or parchment paper. Set aside.
Remove all excess skin from garlic heads. Using a sharp knife to cut off the tops of each garlic head off. You want to see all the cloves. Place the garlic onto a piece of foil and drizzle the top of each head of garlic with 1 tsp with olive oil. Loosely wrap foil.
Place cauliflower florets onto the prepared baking sheet. Drizzle with 2 Tbsp olive oil and season generously with salt and pepper. Use your hand to toss the cauliflower and coat in the oil and seasonings. Spread into an even layer.
Place the foil with the garlic onto one corner of the baking sheet. Roasted garlic and cauliflower for 35 minutes. Stir cauliflower halfway through and spread out again. Reserve 4 cauliflower florets for garnish.
Once the garlic is done, open the foil packet. Wrap a paper towel around the outside of the garlic (it's hot!) and use your fingers to squeeze out all the cloves.
Place a large pot over medium heat. Add 1 Tbsp olive oil. Once oil is hot, add onion and season with salt and pepper. Saute for 5 to 7 minutes until softened.
Add the garlic and cauliflower to the pot and cook for 2 minutes. Pour in vegetable broth and simmer for 20 minutes.
Ladle soup into a blender and puree until smooth (working in batches) and pour back into the pot. Or you can use an immersion blender to puree the soup until smooth right in the pot.
Add butter and Parmesan and stir until melted. Season with salt and pepper to taste.
Portion soup into bowls. Garnish each bowl with a sprinkle of grated Parmesan, black pepper, 1 roasted cauliflower floret, and some green onion. Serve warm.
Be careful is using your blender to puree the soup. You don't want the lid to blow off from the steam being released. Work in batches, cover the lid with a kitchen towel, and hold the lid down while blending.