properly implemented server and client and standard internet connection won't drop the connection for days.
Except ... for anyone with an unreliable internet connection (happens with wireless and 3g and such) they lose more shares the more often they lose the connection.
Important part highlighted.
Of course if you have a dynamic IP address, you also lose shares during that change
Why? Providers are dropping TCP connection because of moving the customer to new IP address?
... pity it's a new problem added by Stratum (that didn't already exist)
A lot of other and more important issues existed before, which are solved by Stratum.
Yes a proper implementation would have to handle a pool restart also - but that is the pools problem not the protocol's problem.
Ok, adding session identifier to the response of mining.subscribe() is trivial, this identifier can be used by mining.resume() on the beginning of another TCP connection. But you're literally opening Pandora box:
a) Backends must have some backbone channel for retrieving session data of given session identifier
or
b) Backends must use exactly the same template, so session identifier can be the same as extranonce1, but backends must have backbone for validating duplicated submissions.
Both solutions have drastical impact to scalability and both solutions are extremely hard to implement. It also open another doors for attacks (DoS, share double spends). That additional infrastructure is definitely not worth of <0.001% lost shares of users with non-standard mining setup.
I agree with you kano, that it's not perfect. But adding another magnitude of complexity won't help much.