So you've asked about how to use it in geometry nodes. I don't know the way without using some python.
Let's suppose that I have a grid object with a shape key:

Foremost, we need to convert data from shape key to attribute so that Geometry Nodes has access to it. To store the data, I created an attribute, type - vector, domain - points:

Data is accessible for edit using Python. I wrote a script which converts shape key to vector attribute:
import bmesh
import bpy
me = bpy.context.object.data
# this line works only in edit mode, make sure that you're in edit mode.
bm = bmesh.from_edit_mesh(me)
# put the name of attribute here:
ea = bm.verts.layers.float_vector['MyVector']
# put the name of shape key here:
sk = bm.verts.layers.shape['ShapeKeyName']
# We get coordinate of deformed vertex and subtract
# the original coordinate to get the difference:
for v in bm.verts:
v[ea]=v[sk]-v.co
bmesh.update_edit_mesh(me)
Once you've got an attribute, it is relatively easy to use it in the geometry nodes:

