Cut the broccoli florets from the stems. Peel the tough outer skin from the stems and trim off the fibrous ends. Cut the stems lengthwise into slices about 1/2-inch thick and then crosswise into 1/2-inch pieces.
Heat the olive oil and butter in a soup pot over medium-high heat until hot. Add the garlic and cook until light brown. Add the onion and celery, lower the heat to medium, and season with salt and pepper. Cook the vegetables slowly until tender, about 10 minutes. Regulate the heat so the vegetables cook without taking on color.
Add the thyme and stir. Add the broccoli stems, stock, and salt and pepper, to taste, and bring to a boil. Cook, uncovered, for about 3 minutes. Add the florets and continue to cook until very tender, about 5 minutes more.
Puree the soup in a blender in small batches. Add some of the spinach and some of the lemon zest to each batch and then puree it. (The soup can be made to this point, covered, and refrigerated for up to 1 day or frozen for up to 1 month.)
Return the soup to the pan and reheat over gentle heat. Stir in the cream. Taste and adjust the seasoning with salt and pepper. Keep warm.
Chef's Note: When I plan on finishing a dish with the addition of a dairy product, as I do here with cream, I often add a dairy product early in the cooking, too, as I do with the butter in the initial cooking of the vegetables. It melds the flavors.