You could possibly use Vertex attributes and a shader to encode XYZ and color into as few bits as you want, and then decode them back out in the shader. But other than that OpenGL (and OSG) doesn't really give you a lot of flexibility.
A lot of game architectures (consoles and mobile devices use a 16-bit 5-6-5 RGB bit coding scheme.