I think a better place to start with this query is "How do palettes work".
For an example, an 8-bit bitmap stores up to 256 colors in an array that is used as the image's palette.
Each pixel then is a represented by a single byte that is an index into the palette array (thus storing 1 byte per pixel instead of 3 or 4).
Using a palette with textures in a pixel shader might prove to be more trouble than it's worth (I might be wrong).
In your pixel shader you will need to sample your texture (without filters, else you may get incorrect/invalid palette indices) and use that "color" value as an index into either an array you passed into the shader or another texture that acts as the palette.
AFAIK graphics cards typically store texture data as 32-bpp (possibly 24-bit sometimes) so you will not be saving any space even if you use an 8-bit. Taking the time to use the palette information will also steal time from your rendering process, so you would be better off simply using multiple textures (which are probably easier to create when you don't have to worry about keeping track of a palette).
Another option that you might like to explore is changing color values by adjusting the hue, saturation, and lightness.
You can still adjust your colors at run time within the shader by changing your HSL values. Check out
Paint.NET to see what you can do with it.
More information about RGB to/from HSL can be found on
Wikipedia.