Methods by default are both server and client side. This way when you try to call server part of the method, what of course takes time, the client part (which is called a stub) automatically updates without waiting for server response. This feature is called latency compensation and thanks to that, your user can see the result in an instant, as if he run the server on his own computer. Then, if the server response turns out to be different than the stub, the client data gets replaced by server data in the background.
Of course you can restrict them to be only server side if you don’t want the stub. You can also differ the stub and server method by using isServer etc. As for your question - no, there is no use case that I can think of which would require creating client-only method. It’s possible, but why make things overcomplicated if you can simply use a function?
No, there is no callback hell with server methods. Why would there be? You can make it a callback hell, by following the path of bad design. But good devs don’t go this way. You can also use promises if you really need to chain your methods.
Google “meteor stub” for more.