Melt the butter in a Dutch oven or large saucepan over medium heat. Add the onion, salt, red pepper flakes, and black pepper. Cook, stirring often, until the onion is translucent and very soft, 5 to 7 minutes. Add the celery, carrot, and garlic. Cook, stirring occasionally, 5 minutes more.
Stir in the potatoes and cook 2 minutes. Add the stock, lemon zest, and bay leaves. Bring to a simmer, then reduce the heat to medium-low and simmer until the potatoes are fork-tender, 20 minutes.
Remove the bay leaves. Purée the soup in a stand blender or with an immersion blender until it is just smooth but still has a bit of texture. Return to the pot. Stir in the half-and-half and then the lemon juice. Reheat over low heat until warm. Taste and season with salt or pepper as needed. Ladle into bowls and enjoy.