I would go even further and say that the user should be able to import a custom shader and determine which paintlayer serves the texture files that are determined in the shader.
To give an example:
For example, we use shaders where three textures are loaded. Every channel (R,G,B, Alpha) of the 3 textures (that makes 12 different channels!)is used for different effects (Diffuse Color, Specular Highlight, Specular Cosine Power, Reflectivity, Ambient Occlusion, Dirt Map, Alpha Blend, Self Illumination, Normal Map, Material Masking and so on). The current system of 3D Coat is very limiting, because we are only able to paint color, Specular and Depth information. Of course it is not possible to provide presets for all possible shaders that users may invent so the best way would be, to provide an open system where the user can determine, which layer in 3D Coat feeds the different channels in the shader.
Practically that would mean, that a user would open a custom shader, 3DCoat would analyse which textures are used in the shader (if that's a problem, the user could provide this information manually) and then the user would determine which layer will be associated with these textures. That also means, that it would be no longer practical to paint in several layers at the same time like it is now (with the sliders für Depth and Opacity) but that the user would have to determine which layers he wants to paint simultaniously. That would be quite easy - just provide a small "link icon" (like in photoshop) that can link layers and the user would then paint in all linked layers simultaniously.
I hope, you get what I mean.