How about a while true loop with cases in it on a state variable.
goto=42
while true ; do
case $goto in
1 )
code for label 1
goes here
break # finish
;;
42 )
code for label 42
goes here
goto=1
;;
esac
done
You don't have the syntactic sugar here, and there are some inconveniences, but think of the positives: this does not claim a new stack frame for each jump, let a lone a new stack frame holding a big string variable that holds most of the script source code.