I think I understand what glEnableVertexAttribArray does -- it activates a particular attribute of a program (please correct me if I am wrong).
What I don\'t understand
It affects vertex array object state.
If so, what about in OpenGL ES 2.0, where there are no VAOs?
Then it affect global context state. The set of state that would become VAO state was originally just global state. That's why the OpenGL bind-to-modify object model exists; so that when you add new objects, you don't have to change your old code.