BASICなどの高級言語(人間にとってわかりやすいプログラミング言語)は、逆に言えばコンピュータ(プチコンなど)にとってはわかりにくい言語となります。
アルファベットの羅列がどのような命令や関数かを1文字ずつ読み取って判断していったら動作速度が非常に遅くなります。
そのためプチコン3号は実行時には仮想マシンコードへとコンパイルが行われます。
このコンパイルはRUNやEXECだけではなくUSEでも行われます。(USEはプログラムを実行せずコンパイルのみ行う命令)
コンパイル時は実行可能な命令、関数か否かの簡単なチェックも行われて変数やラベルなどのリストアップが行われます。
ここで重要なのはコンパイル時の文法チェックはあくまで簡易的なものであり、細かい部分は実行時にチェックが行われるということです。
実は、GOTOのジャンプ先は変数が使えるため「ジャンプ先が正しいかどうか」というチェックはコンパイル時には行われてないのです。(プチコン3号ではコンパイル速度を重視して1パスコンパイルを行っているためたとえGOTOが変数が使えない仕様だったとしてもジャンプ先が正しいかをチェックすることはできないけど)
そのためコンパイルが終わった時点ではGOTOの後に何を書こうがエラーは発生しません。
ここで、該当するプログラムを見てみるとIF 0 GOTO ?"###"となっています。
IF 0だと常にFalseとなるためTHEN以下は実行されることはないのですが、このプログラムにはTHENがありません。
そこで、また重要なのがこういちさんが書いているIFにおいてはIF 〜 THEN GOTOはTHENを省略してIF 〜 GOTOと記述可能な点です。
つまり、実行時は「THEN GOTOのTHENが省略された状態」として認識されるため常にFalseとなるこのIF文はエラーが出ることがないのです。(このGOTOが実行された時に初めてエラーとして認識される)
つまり、明かな記述ミスだけどコンパイル時も実行時もエラーが出ないIF文となります。
これはプチコンのバグというより単なる仕様でしょうね。(特に実害もないので問題ないし)