Bring the water to a boil in a large stockpot. Gently drop the ham into the boiling water; add 1 chopped onion, dill, and salt. Reduce heat to low, cover the stockpot, and simmer 1 hour.
Remove ham from broth. Cut as much meat from the bone as possible, cut into dice, and refrigerate. Return bone and any undesirable meat chunks to the broth. Cover and let simmer an additional 3 hours.
Remove and discard the bone and any large chunks of meat from the broth. Strain the broth through cheesecloth and return strained broth to the stockpot; place over medium heat. Add 1/2 chopped onion to the broth; season with salt and black pepper. Stir diced potatoes into the broth, bring to a boil, and reduce heat to medium low; cook at a simmer until the potatoes are tender, about 20 minutes. Remove from heat to cool, about 20 minutes.
Whisk egg, flour, and about 1/4 cup of the buttermilk together in a bowl until smooth with no lumps; set aside.
Pour remaining buttermilk into the simmering broth. Stir egg mixture into the stockpot; bring the mixture to simmer over medium heat and reduce heat to low. Stir diced ham into the simmering soup; cook until hot, about 15 minutes.