"The core issue seems to be that it is hard to do microservices well."
I've certainly seen them done badly multiple times in multiple places, since that seems easier. Then there are the changes of mind, are the services accessed directly, via an API gateway or via an ESB. Why not all three? Why not change your mind half way about which API gateway? Once the microservices are distributed then it's almost impossible to reuse them so lets develop multiple ones doing the same job and flip a coin which to use. Then lets do a version upgrade...
If your problem isn't the problem that microservices are intended to solve then why, aside from religious conviction, use them?