BASICってあんまり型を気にしなくても良い言語だけど、文字列か数値かは気にしないといけないのです。
GOSUB にはラベルか文字列を渡すことが出来て、今回のパターンはGOSUBに文字列を渡したい。
文字列が渡れば良いので GOSUB の引数には文字列加工しようが文字列変数を渡そうが直接文字をかいても通ります。
ただ、GOSUB は戻ってこれるラベルに飛ぶ命令で、プログラム中にラベルが存在しない場合はエラーとなります。
GOSUB 0:X$ の場合は、引数が文字列になっていないため呼び出しエラー(引数が0だけと解釈されて、: で次の X$ が実行はされていないけど文法エラーとなる)
GOSUB "0:LABEL$" の場合は"0:LABEL$"というラベルが存在してないためのエラー
GOSUBには存在するラベル名の文字列を渡せば良いので、引数の部分の文字列加工が正しく"0:@SONZAISURU_LABEL" と加工できればよく、方法としては
"0:"+LABEL$ とするか、 FORMAT$("0:%S",LABEL$) とするか、いったん文字列変数に代入しておいて L$="0:"+LABEL$ : GOSUB L$ のようにします。
illegal function call は引数の型や数が違う場合に出るので、その場合に本当にその引数の型(数値か配列か文字列)や渡した値(文字列加工結果)が正しいかを気にしていくと良いです。