Decals would obviously be dynamic and appear where a ship has taken hits in in a mission. It wouldn't be an indication how used a ship is, some are obviously brand new while others have been through countless battles.
I believe shaders could be used to render some damage on ships hull regardless of how much damage they've taken. But the problem is how to tell shaders how much damage a mission designer wants to give a particular ship. Of course, a different problem entirely is to create a shader capable of doing just that.
Until such is possible, texture replacement is the best way I believe. But therein lies few small snags. Adding dirt and damage to original textures should be easy enough with little effort, until you come across a ship that doesn't have proper UV mapping but instead uses tiling in its textures.
Another issue is that if you have three sets of textures; brand new, light damage, moderate damage. And a mission which uses all three for all ships, it significantly increases texture count FSO needs to load, in worst case scenario you just doubled memory used by textures, excluding shine, normal and glow maps since those should be shared. If not, then it'd triple texture memory usage.
Texture replacement is great tool to have some variety, but using it in this scale might be bad idea because of significant increase in memory required. Limiting use of texture replacement to ships where mission designer wants to emphasize that this ship has been through a lot should be fine and probably very cool to have.