The fun thing about creating a lisp interpreter is you get to experiment with things like this extremely easily. I did this some years ago. If I recall, I enforced that all functions were pure unless they were bound to a name that ended with an !. This sort of broke my closures implementation but was entertaining for a while.
I highly recommend this for an interesting pastime - and I suppose a source of PL research if you’re into that.
(A lisp interpreter is super easy to make by the way, it’s nothing like a compiler.)