What's so odd about CL's hash table? Anyway, you can have immutable sets/maps/seqs with one quicklisp call: https://common-lisp.net/project/fset/Site/FSet-Tutorial.html
I wish I had time for FSet work, but I just don't right now.
The author drank too much Kool aid or is probably still in his functional programming honeymoon phase so anything mutable is of course bad and odd.
On a more fundamental level, they also suffer more than sequences from the fact that common lisp has no well thought out concept of equality.