Actually, the newer iOS models that support OpenGL ES 2.0 have the ability to use non-power-of-two textures because that is provided for in the OpenGL ES 2.0 specification. These devices also allow for non-power-of-two textures to be used in OpenGL ES 1.1 via the GL_APPLE_texture_2D_limited_npot
extension, which I describe in more detail in my answer here.
The restrictions Apple places on these non-power-of-two textures is that they must not be mipmapped and they must use GL_CLAMP_TO_EDGE
for the wrapping:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
I use such textures in my OpenGL ES 2.0 sample application here.
You shouldn't need to find another way to pass your textures in to your shaders on these devices.