Often, people use nginx in front of nodejs. In other words, nginx will run on port 80 on your public IP address and that's what users will communicate with. In addition, you run nodejs on a private port number, such as 3000, open only to localhost, and nginx is configured to talk to that when necessary to reach your app. You can run any number of such apps, each on their own ports (e.g. 3001, 3002), and the single nginx instance talks to them as needed. You can additionally configure nginx to handle the static content (e.g. images, stylesheets) while passing dynamic requests to your app. nginx can handle compression and tls encryption for you. nginx can even cache dynamic requests from your app, if your app sends applicable caching headers allowing it to do so. You can restart your node apps independently of one another as needed to reload them with new code, without affecting the other apps. Each app can use the cluster module and spawn as many instances as you think are likely to be needed by that particular app.
By searching Google for "nginx node" you should be able to find many guides showing how this kind of thing can be set up.