If evo-stone evolution can't be quit as you said, I think the way is possible. But as you can see, we all don't know much about the evolution routine @0x43110. However, as I've said before, you can add a breakpoint through your debugger(such as vba-sdl-h and no$gba debugger version) on condition that an instruction branch to the "encrypter" function (or the function to recalculate the stats of the evolving pokemon). So the general idea:
1. find the location i've mentioned above
2. in your evolution routine set a safe flag by using flag setter function. (abort if there's no shellder in your team and do not set the flag)
3. make a branch after the instruction "bl recalculate stat function" (or you can adjust yourself), and in your new code simply check the flag and if it was set, find the shellder in your team and delete it, then you can branch back to the code. Absolutely you should clear the flag in this section of the code.
I think this way is feasible though I haven't tried it.