I might suggest three possible approaches:
(I have no experience with this, so these are just suggestions)
1) surface roughness: an optical sensor seems to make sense, assuming that the surface is not too glossy. I would consider a very fine beam laser diode pointed downwards, with a number of tiny phototransistors arranged in a star pattern around it. These transistors would of course be sensitive to the same wavelength as the laser diode. This is very similar to the way an optical mouse works, so as the previous poster suggested a mouse hack might be a starting point.
On a perfectly smooth surface the reflection would impinge on a specific transistor. On a rougher surface, the reflection might be detected by multiple transistors, to varying degrees. You would need to develop some fairly clever filtering software to discriminate between degrees of roughness.
2) surface elasticity: there are resistive pressure sensors available which (as you might guess) respond to variations in pressure. So if you could press down with a known force and distance, the elasticity of the material might be able to be determined through experimentation and software.
3) surface conductivity: most materials exhibit conductivity to some degree. This of course varies considerably with surface humidity. The easiest way to measure conductivity is with a resistive sensor, which can be as simple as two probes (or pads) connected via an op-amp to amplify the difference from measured value vs. a known value.
By combining multiple (conditioned) sensor outputs and using software to discriminate the patterns, it may be possible through experimentation to build up a simple database of standard surface types.
Consider for example the differences between determining the nature of your kitchen granite counter top, and granny's angora wool scarf. I think that entirely different sensor types would be needed, so perhaps if you could narrow down your requirements, some ideas could crystalize and help you find a way forward.
Just a thought.