The (non-)selected Stack Overflow response recommends using NSSM (The "Non Sucking Service Manager"), and I do to - it can run any executable as a service, collect and rotate its stdout/stderr, and makes it easy to register, inspect etc.
I'm not sure how it passes e.g. suspend requests, but for 99% of use cases, it seems to make running and using services much much simpler.
3. one executable can implement multiple windows services, idk if NSSM can do this. (4. learning and my amusement)
I'am working on a higher level version (and without globals) but got stuck on an issue (it seems that the nim object i give to RegisterServiceCtrlHandlerEx as the lpContext: LPVOID gets garbage collected) which are not resolved yet. When i got it working i'll update the repo.