A bit out of topic. But it seems you still could call Kernel exit by calling
Kernel.exit
If you read the instructions for the REPL I wrote with Enelvon, you'd know that I explicitly mention having to either call Kernel.exit or raise a SystemExit exception manually when inside the context of an object with an alternative exit method defined.
So yes, that's exactly what you have to do. And it's still obnoxious.
Also, Dekita, I generally opt for dup when performing non-destructive operations. You could technically use either, and clone is more complete (it copies frozen status and singleton methods / constants), but dup does everything you'd reasonably need to operate on a shallow copy.