Saving/loading the location(x,y,z) of selected vertices
If Vertex Groups and Shape Keys don't address the problem, it is straight-forward to make a script. I'm not sure I understand your constraints but they seem to be:  


locations of verts of the initial object are stored
indices and vert-count are unchanged
coordinates can change.
you want to be able to restore those verts in your modified object which are currently selected.


Rather than writing a script + ui for this, i'd first explore the code needed. I'm going to assume you aren't talking about thousands of vertices, if you do need larger meshes then optimization would help speed up the 'overwrite'

As usual many approaches are possible, i'd start with the one that requires least effort to understand and write. Start a new .blend with a dummy object to represent a simplified version of the objects you are trying to work with in your production files. Get a hang of whether this method works for you or not.

The clone mesh  

This makes a mesh clone of your original object, gives it a fake user. The fake user flag tells blender not to delete the Mesh when it has no direct users.

clone.py

import bpy

mode_set = bpy.ops.object.mode_set

ob = bpy.context.active_object
mode_set(mode = 'OBJECT')

clone_mesh = ob.data.copy()
clone_mesh.name = ob.name + '_clone'
clone_mesh.use_fake_user = True

mode_set(mode = 'EDIT')  # place originally active object back to edit


This finds the clone and updates the active_object's selected vertices using the previously cloned mesh data.

restore_from_clone.py  

import bpy

meshes = bpy.data.meshes
mode_set = bpy.ops.object.mode_set

ob = bpy.context.active_object
mode_set(mode = 'OBJECT') # updates the list of selected verts too

clone_mesh = meshes.get(ob.name + '_clone')
clone_verts = clone_mesh.vertices

for v in ob.data.vertices:
    if v.select:
        v.co = clone_verts[v.index].co

mode_set(mode = 'EDIT')


Usage without UI:


The top one you run once, at the start. While your base object is active.
The second script is what you run whenever you want to restore the selected vertices.


 

Ui version



Here's a small UI version of that script. You can either pick a directory using  the selector or paste it in manually. Even if you pick a file from the FileBrowser it will strip the path to just be a Folder/Directory. 

It appears in the Misc panel:



if you have the Suzanne Object selected it can clone the object and make a hidden mesh, or look in the directory provided for a Suzanne.json, which it can load as the clone mesh.


clone:  Clones the Object's mesh as a hidden mesh called &lt;object_name&gt;_clone  
restore:  Restores the locations of the vertices currently selected  
changed:  Selects only those vertices which changed their locations  
import:  Tries to import a hidden mesh. The currently selected object's name is used to find the json: directory/&lt;object_name&gt;.json  
export:  Makes a &lt;object_name&gt;.json in the directory pointed at.