Melt 2 tablespoons butter in a pot over medium-high heat and cook until lightly browned. Add the ham and cook until slightly browned, about 3 minutes. Remove the ham with a slotted spoon to a plate. Add 1/2 tablespoon butter, 1 cup leeks, and salt and pepper to taste. Cook 4 minutes, then add to the plate; set aside.
Add the remaining 1 1/2 tablespoons butter, leeks, 1/2 teaspoon salt, and pepper to taste to the pot; cook until wilted, about 3 minutes. Add the mushrooms and cook 3 minutes. Sprinkle in the flour and cook, stirring, 2 minutes. Stir in 2 tablespoons sherry, if using, scraping up any browned bits, and cook until evaporated. Add the broth and 2 cups water. Cover and bring to a boil, then reduce the heat to low and simmer, uncovered, until the mushrooms are tender, 8 to 10 minutes.
Puree the soup in batches in a blender until smooth, cracking the lid to let steam escape. Return to the pot, whisk in the half-and-half and bring just to a boil. Stir in three-quarters of the ham-leek mixture, the remaining 1 tablespoon sherry, if using, and salt and pepper to taste. Serve topped with the remaining ham and leeks.
When blending hot liquid, first let it cool for five minutes or so, then transfer it to a blender, filling only halfway. Put the lid on, leaving one corner open. Cover the lid with a kitchen towel to catch splatters, and pulse until smooth.