The GBA emulator on RetroArch plays games well, but is extremely prone to crashing. mGBA (or RetroArch with dynarec disabled) is far more stable, but also on the slow side. It's New3DS for both cases.
This isn't the answer you want to hear, but injection really is the best solution for both.