Use launchd to start VMware's VM on VNC connection
Your problem here is that if launchd is going to listen on the VNC port, well, then it's going to get the traffic on the VNC port.  The approved ways for a daemon program to deal with this are either to expect the network traffic on StdIn and StdOut or to collect a list of file descriptors from launchd and use one of those for the network communication.  Otherwise the client is going to create a connection and then see the connection closed by launchd while it starts up the daemon. 

I suggest you have launchd listen on another port and spawn a simple program that just pipes input to /dev/null while also launching the VM.  So then to start the VM you telnet to this special port. 

Or, you know, the easy thing to do is just always have the VM running. :-)