ну libuv делал для кросплаформеного io т.к. под io нв разных платформах лежать разные системные вызовы, тут я сам не мастер, но вызовы по типу socket, listen, poll, open.
Короче fs на этом по этому есть такой параметр LIBUV_THREAD_POOL_SIZE(написал как впомнил). Также uv под собой юзает kqueue или еще там чет в зависимости от платформы, короче это байда которая уведомит твой поток о том что в io готов и можно читать.
сallstack - это ну колстек, цепочка вызовов, типо libuv в душе не чает что у тебя там в js callstack, ей и не надо, она в своем мире.
А вот ивент луп это штука даже не из v8, хоть вроде в v8 есть примитивная реализация лупа, но типо ее не юзают.
Если что в v8 нету setTimeout() и fetch, и вообще он практически синхронный, из ассинхроного там только Promise и это тоже скользкий момент. Вся асинхронщина это дело рук окружения.
Там вот был такой чувак Райан Дал (думаю он был не один, да вообщем какая разница) который взял всю эту лабу склеил вместе и написал правила лупа и назвал это нодой. По этому очень долго луп в браузере и в ноде отличался. Он и сейчас не один в один но там где он пересекаеться вроде как работает одинаково