If using romaine, cut ribs from lettuce and chop. Chop leaves.
Cook leeks and lettuce stems in butter in a stockpot over medium heat. Stir and add in lemon zest, salt, and pepper, occasionally stirring, about 8–10 minutes, until tender. Add garlic and cook for 1 more minute.
Add lettuce leaves, parsley, and broth, and bring to a boil over high heat. Reduce heat, cover, and simmer until lettuce is tender, about 1–2 minutes.
In batches, using a blender, blend until very smooth. If using half-and-half, return the soup to pot, stir in half-and-half, and reheat until steaming but not boiling, about 2 minutes. Season to taste with salt, pepper, and splash of lemon juice. Serve warm or chilled.