The IPC communication between WSL and native windows applications is getting better all the time. Along with the filesystem they both share you can use sockets, and named pipes.
Because of fork() you will never be able to arbitrarily use NT objects unconstrained in WSL apps, but there are lots of options. You can launch both windows and Linux programs arbitrarily from the shell now so the decision to choose one or the other is slowly coming down to preference.