To be able to specify an offset value that would be added to each index at the vertex lookup stage. This would allow a single vertex buffer to be used to render multiple objects using 16bit indices and without the need to respecify all vertex attributes using the gl***Pointer functions for each object, with all the expense that incurs.
Simple Example Of Mechanism (not intended as an example of need):-
vec3f verts[]={
{0,0,0}, {1,0,0}, {1,1,0}, {0,1,0}, // obj1 verts
{0,0,0}, {-1,0,0}, {-1,-1,0}, {0,-1,0} // obj2 verts
};
GLushort obj1_Indices[]={0,1,2,3};
GLint obj1_ElementOffset = 0;
GLushort obj2_Indices[]={0,1,2,3};
GLint obj2_ElementOffset = 4;
glVertexPointer(3, GL_FLOAT, verts);
glVertexOffset(obj1_ElementOffset);
glDrawRangeElements(GL_QUADS, 0, 3, 4, GL_UNSIGNED_SHORT, obj1_Indices);
glVertexOffset(obj2_ElementOffset);
glDrawRangeElements(GL_QUADS, 0, 3, 4, GL_UNSIGNED_SHORT, obj2_Indices);
Advantages and disadvantages have been discussed here:-
http://www.opengl.org/discussion_boards/ubb/ultimatebb.php?ubb=get_topic;f=3;t=012219