I think that any code that may be used in a cron script should not rely on the globals $PAGE, $USER, etc.
Instead, it should take an explicit $page, $user arguments to any functions. Then we could delete the cron_setup_user function completely.
If that is not possible, perhaps for backwards compatibility, then we should not try to modify the global $PAGE. Instead we should create a new one when necessary.