Run ModalOperatorTimer automatically on animation playback
Solution to the above problem is to use Handler rather than a Modal Operator.
Thanks to @Chebhou for his help in this thread and here.

Below is a working solution to execute on playback using handlers:

import bpy

def refreshNow(val):
    mat = bpy.data.materials['Material']
    nodes = mat.node_tree.nodes
    nodes["Mix"].inputs[0].default_value = nodes["Mix"].inputs[0].default_value
    bpy.context.scene.update()
    return val

refreshNow(0)

bpy.app.driver_namespace['refresh'] = refreshNow
def my_handler(scene):
    refreshNow(0)

def register():
    bpy.app.handlers.frame_change_post.append(my_handler)

if __name__ == "__main__":
    register()