Well, all of those surface values are somewhat categories, we need to stop somewhere in increasing the detail level of those categories. Otherwise nobody will understand that more detailed value. Is the difference really that big? So, I would stick to the values listed on https://wiki.openstreetmap.org/wiki/Key:surface (and the widely used ones – see taginfo).
Instead sub-categories could be used ([iterative refinement](https://wiki.openstreetmap.org/wiki/Any_tags_you_like#Syntactic_conventions_for_new_tags) is often used in tagging). However, I did not yet see something like `surface:gravel=limestone` or `gravel=limestone` (depending on which style you want to use). I had a look: on 112 objects in one area in the US [`gravel=crushed_limestone`](https://taginfo.openstreetmap.org/tags/gravel=crushed_limestone) is used as a refinement of `surface=gravel`. Maybe from one mapper.
Maybe you want to add other describing tags instead (e.g. `smoothness`)?