First of all, what you ask for is a HA scenario -- high availability during the application upgrade. The steps you provided actually looks good. It seems that you have put lots of thought on it. But the key is how to do step 5 and step 6.
I do not know if any web server has the capability to do what you ask for, but load balancer such as F5 should do the trick. In the load balancer, you can configure a pool of servers. Let's say at the very beginning there is only one server (server 1) in the pool serving the request. Then you add server 2 to the pool. Server 2 should be deployed with the upgrade app. Then you instruct load balancer not to send new requests to server 1, but keep connections with all the existing users. All new requests go to server 2. After all the old sessions are done on server 1, you take it out of pool.