You get two categories of options:
Using X11 for its client-server capabilities.
X11 is designed as a client-server protocol, so your application effectively connect to the X11 server to display their windows. In the X11 model, the application is the client and the display is the server.
As an example, if you're sitting next to machineA and machineB is your remote Linux server, you can SSH from machineA to machineB (so machineA is the client as far as SSH is concerned). Then, if you run
xeyes (or any X11 application), machineB will be the client to connect to machineA's X11 server (as far as the X11 application is concerned).
For this to work, you need an X11 server running on machineA. This is not a problem. Linux systems with a desktop environment will have one out of the box. On Windows, you can use the one provided with Cygwin, or perhaps Exceed.
To secure such a connection, use
-Y if you trust the server) with
ssh from a Linux box (machineA), this will automatically forward the X11 connections back to your machineA, tunnelled via SSH. Similarly (since in your use case, machineA is running Windows), SSH clients such as Putty have a option to forward X11.
Using a full remote desktop environment.
You can set up a VNC server (or similar, RDP, ...) on the remote machine and connect to it from a VNC client. (The notion of client and server is perhaps more intuitive in this model.) If your VNC server isn't running by default, you might have to log on via SSH manually to start it up.
You're more likely to get a "full desktop" with this method (it ultimately depends on how it's configured), so you won't need to know the commands to launch the GUIs you want to use.
UltraVNC seem to have an option to have it secured out of the box in their commercial product. If you want to secure such a connection manually, you'll probably have to connect to this machine via SSH and tunnel the VNC port on the remote server to your client machine.
In general, the second option (full desktop) will be faster.