デフォルトがByRefなのは
単に互換性のためだよ。

古いBASICでは関数はなかったサブルーチンだった。
変数はグローバル変数だった。
だから関数の呼び出し先で変更した値は
当然戻ってからも変わっていた。