AFAIK on ES all textures have to be POT, and Point Sprites are square on all OpenGL implementations I am aware of.
The only way to display NPOT textures in any situation on ES is by using texture coordinates and mapping into a POT texture to extract an NPOT portion.
And the only way to do NPOT Point Sprites is to either make your own QUADS (using Triangles), or use a non square image which only takes up a portion of the Point Sprite’s area, and mask it somehow as you theorize.
I have not personally tried to override a Point Sprites texture coordinates with a texture matrix of my own, but perhaps that is possible, rather than having them generate automatically…
i.e. By not using GL_COORD_REPLACE_OES as a TextureEnv parameter.
Someone else might have experience of that… But I suspect it may not be possible, or might have other issues / overheads which make it inefficient depending on your application.
Personally I use large textures with multiple images in them (otherwise know as a texture atlas) when I want to both reduce binding calls and access images which are NPOT.