As a matter of fact, the ONLY reason your reference is actually being set to none is because some other code in the same thread the game is running has nulled it.
I said it would GPF is you attempted to operate it on c++ without a sanity check, nothing more.
If this 'other code' wasn't setting your reference to none, even the unrealscript counterpart would GPF.
If you deallocate memory, any pointers to that memory region won't be nulled out.
So when memory has to be deallocated, either set the pointers to NULL (before, during or after deallocation) or simply destroy the pointer variables as well.
The game automatically deallocates actors after you pile up at least 256 (i think) destroyed actors and this only happens between ticks, not in the middle of it.
The process consists on running through the entire actor list, looping through Object/Actor variable types (defined in unrealscript), evaluating that there's a pointer to an actor and then seeing if this actor has bDeleteMe=True
If this actor has bDeleteMe=True, then the pointer is nulled (set=none).
Once all pointers to destoyed actors are nulled, the game will free up the object table and start deallocating memory.
Also, never, ever reference actors from outside the level unless you know how to prevent the garbage collector from crashing, or you know how to detect level switches before attempting to access an actor in a level that no longer exists.
Horrible examples of this is the Nexgen controller that references Nexgen actors from it's UWindow interface.
Another horrible example is ScriptedTexture class, in some cases a bit of mishandling will crash the game if the actor in charge of controlling a texture is destroyed and the NotifyActor variable isn't nulled out before level switch.