1. Un archivo jar es un conjunto de archivos .class comprimidos, estructurados internamente según la jerarquía de paquetes de cada clase (si quieres hacer una prueba, coje algún archivo .jar y descomprímelo como si se tratara de un .zip, verás como es por dentro.)
2. El código java no se compila directamente en archivos jar, siempre se compila generando archivos .class y posteriormente se generan archivos .jar con los .class. Para compilar código java utilizas el compilador de java, el javac. Una vez que tienes los .class, puedes utilizar el comando jar para generar archivos de ese tipo. Ambas utilidades, javac y jar, forman parte de la distribución de java y están el directorio bin de java.
3. Compilas en el directorio bin porque ahí tienes el compilador de java, el javac, y los estaras usando sin indicar un path para los fuentes. Podría compilar archivos java sin copiarlo ahi, símplemente tienes que especificar la ruta donde está el archivo fuente. De todas formas lo correcto es establecer una serie de variables de entorno en el sistema, JAVA_HOME para indicar donde está el jdk, CLASSPATH, para indicar los directorios donde buscar librerías que utilice tu código, y añadir el directorio bin del JDK a la variable de entorno PATH de tu sistema para que puedas ejecutar el compilador y demás ejecutables del JDK desde cualquier directori. Desde luego, utilizar un entorno de desarrollo como eclipse es más que aconsejable.
4. Tengo entendido que si se pueden generar, desconozco la forma exacta, pero eso si, si generas un .exe, dejará de ser un programa multiplataforma, y solo se podrá ejecutar en el tipo de sistema en el que lo hayas generado. Además los .jar se pueden ejecutar directamente si has incluido en ellos alguna clase con el método main.
La verdad es que el funcionamiento de java es un tema muy extenso como para responder aquí, pero espero que te haya orientado algo.
http://www.blog.lagartija.info