Как организовать доступ к виртуальным хостам из локальной сети и извне без использования файла hosts?
Вам необходимо поднять DNS сервер внутри сети, в нем создать нужные "А" записи (хост, ip). (Прописать всем машинам в сети именно этот DNS сервер либо назначить его через DHCP)
Далее после проброса 80 порта, вам необходимо создать к примеру поддомены (управление DNS) у внешнего регистратора при этом указав ваш внешний ip роутера. Самое главное условие всей это затеи это наличие у вас постоянного IP (реального, статического) и возможность управлять DNS зоной у вашего регистратора
Настроить локальный DNS сервер, прописать его на роутере
Внешним пользователям все равно менять hosts