1. Your general picture is correct. Somebody who writes "the JDK runs your Java program" is using sloppy language.
Note also the meanings of the acronyms:
JVM = Java Virtual Machine = the engine that interprets and executes Java bytecode
JRE = Java Runtime Environment = the complete car including its engine (the JVM) that adds libraries and other runtime support to run Java programs
JDK = Java Development Kit = the set of software that a programmer uses to develop Java software (the compiler and other tools)
2. Software compiled with an older JDK version should normally run also on a newer JRE. So, software compiled with for example JDK 1.5 should run unmodified on Java 6. (In practice there can be small things that make it incompatible, but Oracle is trying really hard to make newer Java versions 100% compatible with older versions).
The version numbering is a bit messy for historic reasons. There is a "developer version number" which is for example the 1.6.0 in "JDK 1.6.0". Then there is the "product version number" which is the 6 in "Java SE 6". JDK 1.6.0 is the JDK for Java SE 6. The Wikipedia page
Java version history gives an overview of the names and version numbers of Java releases.