If I recall correctly, they used manual memory management for many things. But regardless of specific tooling, you can still do memory pooling in GC languages just as well as in manual ones.
The Lispiness that they took advantage of was metaprogramming via s-expressions, an interactive REPL, and dynamic updating of functions during runtime (which would require some form of GC in function memory footprint, but wouldn't be a drag on normal gameplay timing).