A long time ago, I believed I wanted to implement a custom interpreter in Ruby. And then I discovered method_missing, and later on the rabbit hole that is Metaprogramming in Ruby, and that worked wonders to get the interpreter thought of my system, but not before implementing at least 3 DSLs of dubious value.
While it worked great to gently expand my knowledge on what's possible in programming (I would have burned myself on a lisp, not for the lack of trying as I did with Haskell), it also taught me about the meaning of shooting oneself in the foot, and in a sense do not regret the absence of such powers in JS and Python, even if Proxy objects are dangerously close!