First I think it's important to hammer down some terminology. When geometry is rendered with a texture, the texture is not "shaded." Shading the process of coloring the geometry. The texture is used in the shading calculations. With that in mind, I can get to the core of your question.
It depends on how the shader is written. For an asset that has customizable color, the base color can be passed in as the vertex color, and then blended with the texture lookup to derive the final color of the pixel. This is also the cheapest way of accomplishing what you're asking about, since it then doesn't require extra texture memory, and only costs a little more data to be sent to the GPU. Certain parts of the car can be shaded using different materials (if you consider a material to be the combination of several textures and a shader program). Of course, this requires that the car be made of several separate meshes, which may not be ideal.
For a game as large and graphically intense as Saints Row, the car likely has several other textures associated with it, such as diffuse maps, normal maps, light maps, etc. All of these are blended together using different techniques to compute the final look of the surface.
That "using different techniques" part is what brings me back to how I began my question: it all depends on how the shader is written, and how the model is created.
One other possibility is that there is a texture associated with a car which would be called an alpha map. The lookup values in this map can be used such that the fragment of the car is shaded with the primary color if the alpha is 0, and the trim color is used if the alpha is 1. Such a computation might look like this:
float alpha = textureLookup(alphaMap, fragmentCoords).a;
vec4 primaryColor = vertexColor * (1.0 - alpha);
vec4 trimColor = vertexColor * (alpha);
FragColor = primaryColor + trimColor;
This is a bit of a crude GLSL-style example, but I think it demonstrates what I'm describing. Assuming it's feasible to incur the extra texture memory cost to store the alpha map, then this method can be useful.