The problem in general terms is the security model of Java that actually attempts to prevent that a class that has already been loaded be loaded again.
Of course Java since the beginning has supported dynamic class loading, what it is difficult is class re-loading.
It was consider harmful ( and for a good reason ) that a running java application got injected with an new class with malicious code. For instance a java.lang.String cracked implementation comming from the internet , that instead of creating string, deletes some random file hile invoking the method length().
So, they way Java was conceived ( and I presume .NET CLR in consequence, because it was highly "inspired" in JVM's ) was to prevent an already loaded class to load again that same VM.
They offered a mechanism to override this "feature". Classloaders, but again the rules for the class loaders was, they should ask permission to the "parent" classloader before attempting to load a new class, if the parent has already loaded the class, the new class is ignored.
For instance I have used classloaders that load a classes from LDAP or RDBMS
The hot deploy becomes a necessity in the Java world when the application server became mainstream for Java EE ( and also create the need for micro containers like spring to avoid these kind of burden ) .
Restarting the whole app server after every compile drives anyone crazy.
So app server provider, offer this "custom" class loaders to help hot deployment, and using a configuration file, that behavior, SHOULD be disabled when set in production. But the tradeoff is you have to use tons of memory in development. So the good way to do this is restart every 3 - 4 deployments.
This doesn't happen with other languages that were designed from the beginning to load their classes.
In Ruby for instance, you can even add methods to a running class, override a method at runtime or even add a single method to an unique specific object.
The tradeoff in these kinds of environments is of course memory and speed.
I hope this helps.
EDIT
I've found this product some time ago that promises that reload is make as simple as possible. I didn't remember the link when I first wrote this answer, and I do.
It is JavaRebel from ZeroTurnaround