So if I understand how you're approaching this, perhaps the way to do it would be to define a runlevel, say "2", and kill off most of the processes in it, leaving just those processes that should stay up, then telinit to that level.