Port 80 is the standard port for http (without encryption).
Port 443 is the standard port for https (with encryption).
By standard port I mean web browsers know about these ports and so do not expect you to explicitly give the port. So https://www.example.com and https://www.example.com:443 are the same but because you are using the standard port there is no need to include the :443 part as the browser will do it for you.
You can have SSL on any port as its completely independent of the port though there are these standard conventions. Typically you would never have SSL on port 80 for example as that would break these conventions.
So if you want to use you NodeJS service over port 100 then you can but you'll need to explicitly state that port in the URL as well as the https protocol.
LetsEncrypt doesn't give a damn which port you use (except for the verification piece where it puts a file on a place contactable by the outside world to prove you have ownership of the domain and the key - is that what you are talking about here?). So you can use the same cert for both Apache and NodeJs.
A better solution would be to use the standard ports and ProxyPass the node service from Apache (often as plain http but can also be https if you want):
Apache and Node.js on the Same Server. That way you'd have Apache listening on port 80 (redirecting to port 443) and port 443 and node service only available via Apache.