In a Dutch oven or similar large, sturdy soup pot, heat the butter and oil over medium heat until the butter melts. Add the onion, salt, and black pepper. Cook until the onion softens and begins to turn translucent, adjusting the heat as needed so it softens but does not brown, about 5 to 8 minutes.
Add the garlic and potato. Cook, stirring occasionally, for 5 minutes.
Add the broccoli and saute 5 minutes more, stirring carefully and often. Chances are your pot will be very full. Do your best to expose the broccoli evenly to the heat. The broccoli will turn bright green.
Add the broth and milk. Bring to a simmer over medium-high heat.
Partially cover the pot. Reduce the heat to maintain a gentle simmer and cook, stirring periodically, until the broccoli and potatoes are completely tender, about 15 minutes.
With an immersion blender, puree the soup until it is smooth and creamy (or transfer it to a blender and puree in batches—be careful as hot soup splatters!).
Stir in the lemon juice, Parmesan, and cayenne (if using). Carefully taste and add more salt, pepper, and lemon juice to taste. Serve hot with a drizzle of optional heavy cream and sprinkle of chives or parsley.
Notes
TO STORE: Refrigerate cream of broccoli soup in an airtight container for up to 3 days.
TO REHEAT: Warm leftovers in a saucepan on the stovetop over medium heat, or pop it in the microwave. (I prefer the stovetop because there are inevitably cold spots in the soup when I use the microwave.)
TO FREEZE: Transfer the soup to a freezer-safe container or freezer bag. Freeze for up to 6 months and thaw in the refrigerator before reheating.