So essentially, you don't want to "reboot" (reset) emacs (because then you would loose your open files and processes), but you only want to "repair" those broken parts. This is possible simply by redefining functions and setting values to variables (try M-: or use the *scratch* buffer). Elisp, other than Python or C, allows redefining of functions at runtime. (Here is an example what you can even do with Common Lisp.)
But a better approach would be to start a second or third instance of Emacs before starting to experiment. This is what I do.