サブルーチンは長くなった処理をまとめて切り出すだけですが、関数には引数があることで呼び出し側から振る舞いを変えることができます。また、返り値があることで呼び出した結果を受けとることができます。 例えばAとBに格納されている数字がどちらが大きいか判定して大きい数字を得るという処理をGOSUBで書くには @whichbig IF A>B THEN RET=A ELSE RET=B RETURN と書くとRETという変数に結果が入ることになります。 しかしこれだと本当にAとBの比較しかできません。CとDの比較がしたくなったら別のサブルーチンを書くことになります。