If I want to fill a uniform array of structures, do I have no choice but to retrieve the location of each variable within each structure of the array? (so I can submit the uniform values individually like a regular uniform variable)
In general, by glGetUniformLocation you are getting a kind of a reference to the uniform variable, then you use glUniform to push the value to the GPU, such value can be array. For arrays use glUniform1fv or similar type of functions.