catchの各formを評価している最中にthrowされると、throwで指定した値がcatchの戻り値になる。
なので、(throw 'c1 "x = 0")によって、catchの戻り値が"x = 0"になる。以降のformは評価されない。
catchの戻り値は、件のコードでは単に捨てられるようになっているので、出力もされない。
catchの後に「hoge end」を出力して、そのまま終了する。
つまり、throwの次に実行されるのは(format t "hoge end~%")。

http://www.lispworks.com/documentation/HyperSpec/Body/s_catch.htm

というか、普通はcatchやthrowを直接使ったりせず、より上位の仕組みのコンディションを使う。