Most but not all OH 2.x binding support configuration of Things through .things files. Zwave is one of the few exceptions to this, and even there if you are using the Development branch of the Zwave binding (see OH2 Z-Wave refactoring and testing... and SECURITY).
You do not have to forego OH 2.x bindings and Things entirely even if you don’t want to use automatic discovery.
Also, you don’t have to use one of the UIs to perform automatic discovery and manage the inbox. You can do all of those actions through the REST API or the Karaf console as well.
Not really. The Location only changes where they show up in the Control tab of PaperUI. I do not believe it currently has any other purpose yet. You can leave out the location and just leave the Thing as the default that it comes up as.
VSCode has full support for creating and editing .things files.