From the MAN PAGES:
Shutdown - "shutdown arranges for the system to be brought down in a safe way. All
logged-in users are notified that the system is going down and, within
the last five minutes of TIME, new logins are prevented." Time mentioned here is an amount specify by the user that is shutting down.
Halt - "These programs allow a system administrator to reboot, halt or poweroff
The difference is that Halt can be more "aggressive" when shutting down than Shutdown itself. It has parameters than can literally force the system to shutdown without regarding services or opened programs. If you run halt without any parameters it will simply execute the shutdown command. Something like an alias. If you run it for example with the parameter
--force it will "force" the system into a reboot really fast.
In the case of halt or shutdown, they will wait for all processes to finish correctly before turning the PC off or rebooting. If a service or app does not close or does not close properly you will see what you mention there (The ubuntu logo with the dots).
The proper way in the terminal for a single user or multi user is shutdown. But if the shutdown is not working verify what services you have running and which one is causing the slowness or freezing of the shutdown.