Heat the olive oil in a soup pot or Dutch oven over medium heat. Add the onions, garlic, and celery; cook until they are tender and aromatic—about 5 minutes. Stir it a few times here and there to prevent burning.
Add the broccoli and broth, then cover the pot and simmer allow it to simmer for 10 minutes.
Pour the mixture into a high-power blender or food processor, but don’t fill it more than halfway full. (We don’t want spillage.) Start the blender, using a few quick pulses to get the mixture moving, then purée until you have a smooth and silky texture. Purée the soup in batches, transferring your purée into a clean container. Set aside.
Melt the butter in the soup pot or Dutch oven you were using for the soup. Once the butter is melted, whisk in the flour until a roux is formed. Then, whisk in the milk. Whisk until the mixture thickens into a white sauce thick enough to coat the back of a spoon. (Congrats! You just made a béchamel sauce!)
Bit by bit, transfer the broccoli soup into the béchamel, stirring the blend. Season with salt and pepper to taste. Serve, and garnish the soup with whatever kind of toppings you like—or serve with a nice hunk of crusty bread!