Ответ 1
Эта версия коррелирует с версией Servlet API. Servlet 3.0 (выпущен в декабре 2009 года как часть Java EE 6) работает только на контейнерах Servlet 3.0 (Tomcat 7, Glassfish 3, JBoss AS 6 и т.д.). Servlet 2.5 (выпущен в 11 мая 2006 года как часть Java EE 5) работает только на контейнерах Servlet 2.5 или новее (Tomcat 6, Glassfish 2, JBoss AS 5 и т.д.), Servlet 2.4 (выпущен в ноябре 2003 года как часть J2EE 1.4) работает только на контейнерах Servlet 2.4 или новее и т.д.
Вам просто нужно выбрать правильную версию API, в которой вы хотите реализовать свой webapp. Если у вас нет свободы в выборе контейнера сервлета, тогда выберите API, который лучше всего подходит для версии контейнера сервлета.
Что касается того, почему JDK по умолчанию использует тот или иной, это просто минимальное требование JDK для версии Servlet API. Часто, когда вы выбираете старый API сервлета, на самом деле используемый JRE/JDK также является старым.