I used to think I was in the majority as someone who cares about what gets installed, but actually people like us are very much in the minority. There are a huge number of people out there who don't care what the machine does as long as it works, will acquire the next version of something just because it's got a bigger number, and trust the computer implicitly. Users are very, very naive.
This may be true, especially in the world of Windows. ;-)
But if they hadn't got any part of the JRE it wouldn't have worked anyway?
Surely, but it wouldn't confuse the user. The user actually has to know that Java is not fully installed to fix this issue or the app has to be invoked on each call to Java (see below).
Treat it like a library dependency. The core app loads and works out a component is missing, so goes to get it. If there's no Internet connection it posts a "need update" message and asks the user whether to proceed - users have seen this all over their browsers and should be familiar with the process. All the way through it provides the user with the alternative of getting the whole damn thing instead, which will enable them to do lots of funky things, run all these amazing apps etc.
In this case all calls to "java" must be directed to the app, so it can decide if something is missing. It would be a thin layer above the JRE. Actually I don't know if it's possible (with a moderate effort) to have only the source and say: "this app needs Swing version x.y, AWT version x.z etc.". Additionally it requires that the JRE can be broken into several independant pieces.
I dunno, I think it'd work.
It's a nice idea, but I still see too much problems. Besides the large download for the JRE I think Java is easy to install on Windows, isn't it?