Just to clarify (since my previous explanation is rather simplistic): The "list" of symbol names is not a list directly exposed inside the interpreter. It's part of the interpreter's internal program. The atoms-family function is simply exposing the names from that list. The list contains much more than just the names, it also contains type definitions and pointers to the RAM.
The way localized variables are handled in AutoLisp is each item in the atoms list has a structure known as a stack instead of simply space for a pointer. A stack basically means a list which can only be added to (called push) / removed from (called pop) at it's head. Whenever a defun declares a locak variable, the atoms list is checked if such already exists. If not it just creates a new one, if it already exists then a new ram position pointer is pushed onto that symbol's stack. When the defun which created the local var completes that symbol's stack gets inspected, the RAM pointed to by the pointer freed, and the pointer poped from the stack. If sych stack then becomes empty the symbol item is removed from the atoms list.
My "worry" with BC is seeing as it never removes the symbol name from the atoms list, all I can say for sure is the value returned when inspecting such variable is nil. That doesn't mean the RAM is cleared at all, since the value nil could still be saved somewhere in RAM. Or perhaps nil is defined as a null pointer, in which case it might not be as bad. The point is I don't know, and the list not being cleared makes me very itchy to say the least.