Почему такой код считается нормальным?
В функциях не должно быть глобальных переменных
Да, это плохая практика, но nodejs ее пропагандирует, увы.Каждая функция должна быть написана так, чтобы её можно было скопировать в другой проект без изменений
В реальной жизни это утверждение справедливо только для библиотек общего назначения. Когда ваши функции/методы реализуют бизнес логику приложения - лучше их написать менее универсальными, но более поддерживаемыми. Все равно переносить в другой проект вы их не будете
в данном случае это просто обертка для асинхронного выполнения. 
Можно было написатьconst Hapi = require('hapi');
const server = Hapi.server({});

server.start().catch(console.error);
И всё. Без всяких функций которые вы куда-то хотите копировать
Плюс в данном случае const server = Hapi.server({});
это не глобальная переменная. Это переменная с областью видимости в пределах текущего модуля (js файла)
Глобальные переменные в Ноде это свойста объекта global