Be careful with your variable names. You're dangerously re-defining the variable c within your list comprehensions.
Do this instead:
counties = [x['long_name'] for x in c if 'neighborhood' in x['types']]
localities = [x['long_name'] for x in c if 'locality' in x['types']]
Better yet, use different names entirely so your code is easier to read and reason ...
A good tool is leaflet-control-geocoder (see demo with Google, Nominatim, Bing, and Mapbox services).
I prefer to use Mapbox for geocoding, it works much better with US addresses compared to Nominatim, at least in Connecticut. You will need to create an account and get the public API key. With their new pricing rolled out in June 2019, you get 100,000 ...
You can try the leaflet-geosearch plugin.
The OSM demo seems to be what you are looking for.
There are other options you can find on leaflet's plugins page.
Please remember that the quality of the results depends on the underlying data,
Google works very hard on their data. That's why it's no longer free to use.
Also note that the OSM Nominatim API is ...
Not sure if it's still actual but:
Have you ever had you locator working with the original "50000 lines of magic Xml" file?
If Yes and you just need to clean up the file to 400-600 lines, I'd suggest to delete them by small pieces and rebuild the locator after each update. In order to catch the part that you mistakenly deleted.
I work for TomTom. Have you checked our TomTom Maps APIs?
The Search API provides for Geocoding and Reverse Geocoding and the free tier account is probably enough for your needs.
Take a look at our tutorials. The API KEY registration is free (no credit card needed)
More information in the Search API documentation.