yes, using tagged memory is very easy and effective on x64 since you get 8 different tags to play with, for non-word-sized-things all you need is an object header tag and you can know what each single bit does in memory as long as you traverse it in the direction from header to data
it does restrict tagged unsigned numbers to 61 bits of precision and signed ones to 60, but that hardly matters
also allows you to get away with having cons cells just be two naked words next to each other, at least as long as you also have a tracing garbage collector
does the system restrict the user from creating symbols at runtime? this seems like the one major thing if you want to sandbox a lisp
