Some exceptions push an error code, some don't. So if you are ignoring any exceptions, then you need a minimum of two versions, one that can remove the error code, and one that doesn't. What's worse, you also pretty much have to remap the PIC (assuming that's what you're using) because otherwise hardware IRQs can land on exceptions that would push error codes if they were exceptions, but now lack the code.
On the other hand, with exceptions you should probably panic with a helpful message if you are not handling it, because some exceptions can't even be resumed, and even when they can, it varies whether they resume at or after the instruction that caused the exceptions (faults resume at, traps after, and aborts can't be resumed reliably).
edit: was gonna say but forgot, that if you resume a fault without doing anything about the fault condition, you've essentially created a sophisticated version of an infinite loop, but I guess the CPU might handle hardware interrupts just before it faults again, so you might still see your keyboard working normal, even if the program doesn't seem to proceed anywhere
Anyway, if that is not the problem, then you have to clarify your original post. What exactly is it that happens, and what should happen?
The real problem with goto is not with the control transfer, but with environments. Properly tail-recursive closures get both right.