When detaching program, you should redirect both outputs to null, and use:

    &>/dev/null &
instead of just:

    &

... so that starting ssh do not need to worry about stdout, stderr and can exit. 

nohup is not always important (depending of shell config and program's  hup signal handling..., in my test: 'sleep', 'xclock' and 'wine notepad.exe' continue to work without need of nohup). Minimal example that shows detaching behaviour is that:

    ssh 1.2.3.4 "sleep 10 &"               ... exits after 10 seconds
    ssh 1.2.3.4 "sleep 10 &>/dev/null &"   ... exits immediately