Some code from this answer. But adapted for bmesh and the selection aspects of this question.
The principle is to start from selected vertices, and:
Make a dictionary of possible links to other vertices
Iterate available vertices and for each follow all possible remaining paths
The code with comments:
def make_vert_paths( verts ):...
Remesh modifier does not have a function affecting only a specific group of vertices.
A: I don't think it is possible to Remesh only specific object faces.
Quite hard imagine how this "remeshed" part of model (vertex group) would be merged with original. I think it would result with much more artefact on surface - since it will mix two different topologies....
Add vert at cursor in edit mode
The cursor is in global coordinates. Set to local by multiplying by the objects world matrix inverse.
context = bpy.context
scene = context.scene
ob = context.object
mwi = ob.matrix_world.inverted()
me = ob.data
bm = bmesh.from_edit_mesh(me)
bm.verts.new(mwi @ scene.cursor.location)