Shader:send calls glGetError, which can be a performance bottleneck (especially on OpenGL ES)
Shader:send relies on the glGetError function to create a lua error if the variable can't be sent to the shader for whatever reason. glGetError, like most glGet* opengl functions, can be fairly expensive when called in performance-sensitive code, especially so in OpenGL ES 2.
Unfortunately, while 'manually' validating Shader:send calls is possible, it would add a fair amount of code complexity to the Shader class just for the validation. glGetActiveUniform would likely be used to build a list of valid shader uniforms and their properties, right after the shader program has been linked.