I've struggled with, and am still struggling with, units hanging on shutdown. It's my biggest complaint with systemD aside from journald eating its own logs.
I've been using magic SysRq to force hanging units to quit. SysRq + e sends SIGINT to all processes, and SysRq + i sends SIGKILL.