Railsはbin/railsが無いとnew以外のコマンドを実行できません。今回はコードレベルでその理由を追っていこうと思います。railsのバージョンは5.1.4です。

まずbundle exec railsするとexe/railsが呼び出されます

exe/railsはさらにlib/rails/cli.rbを呼び出します

Rails::AppLoader.exec_appはbin/railsやscript/railsを探し出し、あればそのファイルを引数にexecを呼び出します。

bin/railsはこんな感じになってます

rails/commandsはRails::Command.invokeを呼び出します。このRails::Commandがserverやconsole等を実行する実体となってます。

一方でbin/railsやscript/railsが存在しない場合は Rails::Command.invoke の引数が:applicationか:pluginになります。Railsアプリを作成したい場合は Rails::Command.invoke :application, ARGVが呼ばれ、Railsアプリのジェネレータが呼び出されます。new以外のサブコマンドを指定するとhelpを出す部分は Rails::AppBuilder::ARGVScrubber#handle_invalid_command!メソッドになります。

ということでbin/railsがないとnewコマンドのみ、あればnewコマンド以外が使えるようになります。