"Reexec init" is normal solution. It is used in sysvinit-based distros: every time init is updated, init reexecs itself.
Also, probably the most beautiful solution is systemd's one: :) write special program, which unmounts file systems and then reboots/poweroffs the computer.