The client part is exactly why people might use ngrok to get a public hostname - the number 1 priority is access to an internal resource from anywhere in the world with minimal setup, and that ngrok/other mediator means nobody needs any inbound ports open besides via loopback on the host.
Yeah it depends--I use ngrok (or similar services) for access to internal stuff I run. I don't want to pay money to run a VPS in the cloud when I have a NAS, etc. running it at home. But I also don't want to pay a premium for a public IP at home, and deal with the immense security headache of securing such an entrypoint from the public internet. So a tor hidden service works great as a no cost VPN-like alternative.
But yeah if your goal is "expose this thing with a public IP/DNS" then there is no way around using your own server, or buying/leeching off a service like ngrok.
You don't need any incoming ports open for a tor hidden service either though. Both the server and client side connect out to tor, and then get routed to each other over it.