я лишь говорил, что он асинхронный, а это круто, когда язык предоставляет эту функциональность из коробки
Почти любой язык, где есть библиотека работы с сетью, будет предоставлять асинхронность.
JS это не асинхронный язык. Это синхронный язык, поэтому и приходится городить огород callback-ов. Для того чтобы можно было писать асинхронный код. Это костыль. (Ruby в этом плане точно такой же - никаких отличий.)
Асинхронным в каком-то смысле можно было бы назвать, например, Haskell, где все вычисления "ленивые" (вызовы "методов", грубо говоря, откладываются до момента, где требуется конечный результат).
Или какой-нибудь Erlang/Elixir, где спавн процесса в самом деле является конструкцией языка.