Dan,
It's got nothing to do with preserving the value of the lisp variable - that was just a side effect of the current behaviour. However, it has EVERYTHING to do with designing your code/programs/applications to mimic the functionality already provided and set down as a standard...in this case, the AutoCAD AutoLISP environment itself.
Kerry,
I'm starting to think the implementation is substantially different from the ARX model. In ARX, you define your external command as returning an int. You would then process the resulttbuffer arguments you were passed (if this is your design) and if they are not what was expected, you simply return an ARX error code - RTERROR for example.
If, however, all your passed args were ridgy-didge, you would then do your mojo and use the appropriate value return function (acedRetInt(), acedRetReal(), acedRetList() etc.) to return to lisp the data it needed.
So you see, your function returns an int, but you use a special value return function for lisp - this does not appear to be how the LispFunction attribute is designed to work, so returning nil might be the only course of action.