Shape keys and applying subdivision surface modifier
This answer comes from a previous one here Cannot Apply Array Modifier. I simply add some more details in the explanation and a way to do it for all shape keys at once.

Here is a simple shape, which has a subsurface modifier and shape keys :





Make one copy of your initial object for each shape key and set for each the shape key to "1" :



Select this copies and Alt + C and "mesh from curve/..." :



The modifiers are applied and the shape keys too (these objects now have no shape keys or subsurf modifiers).

Make another copy of your original object, remove the shape keys from it, and apply the subsurf modifier :



Now select the "shape keyed" objects, and the last copy we just made (in this order), and in the shape key panel use "join as shapes" :



We now have the final object, with the subsurface modifier applied and the shape keys available :