What a strange statement. 'shutdown' will switch the system to runlevel 0 (stop) or runlevel 6 (reboot) depending on the arguments. An xsession will not interfere at all with shutdown doing its job. Going back over a decade and onto UNIX systems, you could have maybe 40 or more people connected to a mainframe and all using X - so there you've got 40 X sessions. Now the admin logs onto X as a normal user, runs 'su' (or whatever mechanism that UNIX had - 'wheel' group or whatever), fiddles around with the system, then invokes shutdown with, say, a 5 minute wait and messages broadcast to users every 30 seconds. The admin then logs out and goes for a cup of coffee. The users don't necessarily log out; maybe they were talking to someone or ran off to grab a coffee too - the system boots them all off and shuts down (or restarts) anyway. It would be outright stupid to require all X sessions to be closed first - how can you possibly do that when anyone can log in from any terminal in the building/campus/planet?
Now when the system is shutting down, SIGINT will be broadcast to all running applications. Applications should respond by saving any work and closing in a sensible way. Of course applications that don't handle SIGINT simply die. After some set amount of time, SIGKILL is sent to any processes which are still running. 'init' is now the sole process running and it continues to go through its list of things to do to shut down (sync HDs, unmount filesystems, unload modules, park HD heads, switch off computer).