Потому что async не может сделать возврат из вложенной функции
но пример кстати не самый прям серьёзный) прикольнее это когда сообщение отправляешь по вебсокету а ответ через минуту придёт. в данном случае без промиса не напишешь так как надо сохранить этот промис пока идёт ожидание. потом когда сообщение ответ через веб-сокет пришло, отыскать его и зарезолвить или зареджектить