The problem of /usr/libexec/javahome not working correctly if JAVAHOME is set is one problem, and you can hack that in your shell profile by unsetting JAVAHOME before running it.
However, this doesn't fix the problem of applications launched via the GUI. Most of those don't work.
Hacking individual ones to make setting the JAVAHOME variable then exposes the next problem:
JAVA_HOME contains /Library/Internet Plug-Ins/JavaAppletPlugin.plugin
Note the space. So things just **** up later. Someone needs to learn that spaces in file/directory names are NOT a good idea in Unix based systems.