И убедись, что эти функции не требуют присваивания своего результата (Emacs'а под рукой нет, доков тоже).
Вот ведь... Именно в этом дело. В документации написано, что аргументы модифицируются при неободимости... И в Common Lisp, оказывается, они точно так же работают.
Главный профит этих разрушающих функций - утилизация. Cons ячейки из a разрушаются и из них создаётся новый список, в отличии от union где новый список формируется из новых ячеек. Содержимое a естественно изменяется, но как - стандарт CL ложит на это болт. Главное - результат в возврате функции.