Not only does hot deployment work almost always, so does in-place compilation of modified code within deployed modules while connected to a remote application server in debug mode.
To both of these points, you still have classloader issues which cannot be resolved (App/Web server vs application classloading). This is one of the reasons that Java 8 is going down the modular Jigsaw route (taking ideas from OSGi along the way). Some web/app servers have put together clever tricks over the years and JRebel also helps, but it's certainly not foolproof.
I'll concede that the static vs dynamic language gap is narrowing in terms of flexibility (and yes BookAndToy is a _very_ contrived example), but dynamic language fans love the fact that you don't have to refactor at all.
FWIW, we've had some problems with hot deployment and Tomcat. After a few of them the VM OOMs. Probably we are doing something wrong or triggering some Tomcat bug, haven't dug deep enough yet.