Кристиан Рау затрагивает правильную тему.
Причиной, по которой glGenLists гарантирует упорядочение возвращаемого значения, является рисование строк. Модель использования хотела, чтобы glListBase + glCallLists позволял простой
// ascii model
// init
asciiBase = glGenLists(128);
// usage
glListBase(asciiBase);
glCallList(strlen(string), GL_UNSIGNED_BYTE, string);
Для этой модели использования вы действительно требовали, чтобы диапазон был непрерывным. Для текстур такой модели не предусматривалось, поэтому требование получать смежные имена было снято, поскольку это упростило реализацию GL.
В качестве дополнительного лакомства обратите внимание, что все вызовы glGen * являются необязательными. Ничто не мешает вам делать:
glBindTexture(GL_TEXTURE_2D, 5);
// never called glGenTextures to get that 5!!!