Allowing users to redefine anything at any point has far reaching design consequences, and has helped lisp/Smalltalk IDEs: https://news.ycombinator.com/item?id=16586347