Всё довольно просто. NGINX - это веб-сервер, а PM2 - менеджер процессов Node.js.
NGINX умеет работать с доменами, поддоменами, умеет делать маршрутизацию определённых роутов к определённым сервисам, в него легко добавить сертификаты SSL/TLS для HTTPS/HTTP2. PM2 ничего этого не умеет, потому что он не является веб-сервером, он буквально просто управляет процессами Node.js, всё остальное остаётся либо на разработчике, либо на frontend-сервере (напр. NGINX). Если не использовать NGINX или другой frontend-сервер, то вам придётся писать работу с доменами, как-то отдавать статику, например, клиентское приложение (HTML, CSS, JS, картинки и тд), подключить сертификаты к node.js приложению, думать, как поддерживать несколько портов (80/443). В конце концов это просто небезопасно, все процессы, которые прослушивают порты до 1000, должны иметь особые привилегии, если в вашем коде найдут дыру, то смогут исполнить любой код с этими самыми привилегиями, что может оказаться очень плачевно. А в схеме с nginx ваши процессы node.js могут быть запущены на более высоких портах (1000+) и запускаться от имени пользователя, у которого минимальные права, и если хакер и найдёт дыру в вашем приложении, полностью захватить сервер не сможет. За дырами в безопасности nginx следят очень многие люди и компании, поэтому их относительно быстро закрывают, а в вашем приложении следите за ними только вы.