GNU Emacs Lisp Reference Manual
You can discard the functions and variables loaded by a library to reclaim memory for other Lisp objects. To do this, use the function unload-feature:
defconst, defvar, defun, defmacro, defsubst and defalias. It then restores any autoloads formerly associated with those symbols. (Loading saves these in the autoload property of the symbol.) Ordinarily, unload-feature refuses to unload a library on which other loaded libraries depend. (A library a depends on library b if a contains a require for b.) If the optional argument force is non-nil, dependencies are ignored and you can unload any library.
The unload-feature function is written in Lisp; its actions are based on the variable load-history.
Each element is a list and describes one library. The CAR of the list is the name of the library, as a string. The rest of the list is composed of these kinds of objects:
(require . feature) indicating features that were required.(provide . feature) indicating features that were provided.The value of load-history may have one element whose CAR is nil. This element describes definitions made with eval-buffer on a buffer that is not visiting a file.
The command eval-region updates load-history, but does so by adding the symbols defined to the element for the file being visited, rather than replacing that element.