Your concerns are all valid, but about 1 and 3 there are possible solutions. I’m using Rust+Tonic to build an API and that’s eliminate the necessity of proxies and it’s very simple to use.
I know that it don’t solve all problems, but IMHO is a question of adoption. Easier told tools will be develop for it.
I think you can block entire instances as a user. But, if not, you can create your own instance and federate with only the instances that you like. Far more work though.
Here: using Thunder.