Execute instructions from RAM in a hobbyist-friendy microcontroller
Another option to consider is using an interpreted language for your programs stored on the SD card. This way, the processor isn't executing the machine code read from the card, it's just treating it as data.

This approach gives you flexibility at the cost of speed.

There are plenty of options to choose from:
Survey of High-Level Language Interpreters/Compilers for Microcontrollers