Call a modal operator from Python and keep its interactivity
Adding a node and moving a node are two different actions. You will find that the two operators invoked when adding a node are bpy.ops.node.add_node() and bpy.ops.node.translate_attach_remove_on_cancel()

Using an example from a small addon I wrote a while ago -

def execute(self, context):
    if context.active_object.type == 'ARMATURE' \
            and context.active_object.mode == 'EDIT':
        bpy.ops.armature.duplicate()
        for b in context.selected_bones:
            b.parent = None
    else:
        bpy.ops.object.duplicate()
        bpy.ops.object.parent_clear(type='CLEAR')
    return bpy.ops.transform.translate('INVOKE_DEFAULT')


you can see that the object gets duplicated, with a different operator used for armatures that are being edited, then the parent info gets cleared and the translate operator is called at the end.