禁止というかスタックが溜まるので、スタック溢れて落ちたり他言語知ってると直観的じゃない挙動になったりします。
HSPだとdeffuncっていう関数のエントリーポイントの行があるだけで、次の行はただの文で
コンパイラ的にreturnがループ内か静的に調べるのは微妙に面倒くさいか誤判定ありそうな気がします。
if文みたいにに、repeat 10 {} loop や defun foo {} 方式を強制にしたり、
構造化BASICみたいにdeffunc foo ... end deffunc、sub foo ... end sub方式にしたりすると、
素直ですが別物になっちゃいますね。
gotoやlooplevで変則挙動させてるプログラムやHSPROUTINEを触ってるプラグインには泣いてもらうことにすれば、
cmdfunc_gosub/code_callfuncでlooplevを保存して、cmdfunc_returnで巻き戻すのでスタック溢れないみたいな対応は
割と簡単そうな気がします。
goto *main
*label1
repeat 10
mes "B " + looplev + " " + cnt
if cnt == 3: return
loop
goto *main
repeat
*main
pos 0, 0
mes "A1 " + looplev
wait 10
gosub *label1
mes "A2 " + looplev
if looplev > 0: loop