As you noted the delete user functionality requires the user admin to be loaded to work.  There are also circumstances where more than just the user functions need to be included.  I was unable to replicate a test condition that caused the problem, but I was able to record  the missing function in the debug file.

Other plugins may hook functions that are fired in the delete user processing, these functions may have the reasonable expectation that the entire admin functionality is available. The third-party functionality may not understand that these anonymous users are different than regular users.  If these hook functions have exceptions delete user processing would stop and the temporary user count would grow indefinitely.

If cron processing happens in the same context that was used for a user page view there may be less resources available for the cleanup.  Putting the delete processing in a clean process, in the admin context should give it the maximum available resources.

About the non-blocking.  I originally had it as a non-blocking post, and it worked fine.  I was concerned that the cron job should not finish and be rescheduled until the previous operation failed.  I'll admit that it wasn't for any known reason other than it made me uneasy.