Casting aside actual "vulnerabilities" (like buffer overflows, bad encryption, etc...), why can't a software VPN act just like a hardware VPN? Take every byte of traffic sent to a network device, and tunnel it to another endpoint?
I'm assuming there are several major reasons that I don't know about that makes what seems like a really trivial problem super difficult...