The best way is to leverage launchd
. The restriction on binding to ports < 1024 will still be there and is not likely to go anywhere, but if your app requests elevated privileges once in order to add the necessary launchd configuration, then you can let launchd do the actual listening on the privileged port and pass the socket to your app when appropriate.
See the section on launchd in this OS X Developer Library reference, and the further references given there for learning more about launchd and how to use it safely.