Behind the scenes this uses continuations, which I still don’t have a full grasp on them, I just know they can give you the break effect.
CATCH sets its upvar TAG to its continuation, i.e., what’s left to do after the CATCH finishes, namely the SAY HELLO block in this case. THROW just abandons the current computation and instead runs the saved continuation, i.e., it goes straight to the SAY HELLO.