Как работает на низком уровне Node.js и Angular?
думаю это Вам поможет Объясняем современный JavaScript динозавруКак объяснить 10 лет веб-разработки путешественник...
NodeJs - это движок для JavaScript , который вынесли из браузера и добавили возможности , которые в браузерном JS были невозможны из-за безопасности , например работа с файловой системой и другие. Сам движок NODEJS называется V8 ,  написан на C++ и компилит JS  в машинный код.
Вебсервер - это процесс который слушает определенный порт на HTTP запросы , принимает их , парсит и отдает назад ответ в зависимости от запроса.  Раньше в этот ответ помещался готовый html код c данными , которые подтягивались из базы, что и было страницей.  
Так как появилась возможность делать JS код вне браузера , то взяли и написали на нем веб-сервер , который все делает на JS . Что дало возможность написать и фронт и бэк сайта на одном языке 
Сейчас же при запросе к серверу , сервер отдает сразу HTML код страницы с JS кодом и из этого js кода посылаются асинхронные запросы к бекенду (AJAX) на определенные url адреса сервера  RESTip , которые отдают не готовые страницы , а только данные в чистом виде в формате JSON  и  JS парсит эти данные и вставляет  в стандартные html  узлы  или  же кастомные , которые зовутся  WebComponets, но пока имеют слабую поддержку браузеров ,  страницы.  Angular упрощает написание кастомных html узлов и внедрение в них данных плюс позволяет их реиспользовать. 
Получается что у Вас может один раз прийти html + js код и потом вся работа с сайтом будет идти через одну страницу в которую javascript будет вставлять нужные данные, а при необходимости еще и обрабатывать их перед вставкой.  Сайты , которые так работают называются SPA (Single Page Aplication).
У вас на сервере должен быть запущен постоянно работающий процесс, чтобы обрабатывать входящие запросы от клиентов. На PHP как правило пишут скрипты, которые не висят постоянно в памяти, а выполняются и умирают раз за разом. В таких условиях нужен посредник в виде постоянно работающего процесса. Поэтому вы используете apache, nginx, etc или пользуетесь встроенным php -S localhost:8080 mysite/index.php
В node.js можно несколько иначе. Скрипты висят в памяти. Чтобы с ними как-то взаимодействовать по сети, вы  должны позаботиться об этом самостоятельно и реализовать некий протокол взаимодействия с вашей программой поверх tcp. Это может быть популярный и всем известный http протокол или что-то менее известное или даже придуманное вами.
Поскольку http протокол довольно популярен, то в node.js предоставили готовую реализацию в виде http модуля, который позволяет написать http сервер в несколько строк.
Строго говоря, вы это всё можете делать на любом языке, который умеет работать с сетью и PHP здесь не является исключением. Например вот одна из реализаций http сервера на PHP https://github.com/reactphp/http