My dad and I wrote a BASIC interpreter for the IBM PC in the '80s called BBasic, based on the Acorn BBC Micro dialect. BBC BASIC had an "EVAL" function, where it took a string and interpreted it as an expression. I persuaded dad that we should expand this functionality to an EXEC statement, that would take a string and interpret it as BASIC commands. If you put a line number at the start of the string, it would insert the code in the string into the program that was running - so you could have self-modifying BASIC code. There was one restriction, that if any of the points in the call stack were prior to the inserted statement, then it would fall over in a very untidy heap.
It actually turned out to be pretty useful, the one used that I can remember was to store persistent data within the program itself, and you could save a program as an executable that included a runtime interpreter.