JavaScriptからSalesforce APIでクエリを実行した場合、一度に取得できるレコードは2000件までですが、queryMoreメソッドを利用することで続きのレコードを取得できます。
本来はisDone()で次のレコードが存在するかを判定してqueryMore()を実行という流れですが、JSforceには自動的にqueryMoreするautoFetchのオプションあるみたいです。
これを利用することで簡単にレコードの一括表示を行うことができました。試しに12万件のレコードを表示してみたところ、時間は掛かりましたがタイムアウトにならずに表示できました。(AngularJSを使った検索画面で確認したので、他のやり方ならもう少し早く表示できるかもしれません。)
APIの使用制限の注意が必要ですが、Apexで厳しい場合はこの方法で対応できそうです。
サンプルコード
GitHub - tyoshikawa1106/apex-jsforce-search-query-more-sample: JSforce Search QueryMore Sample Code