Calling an Operator from an application handler
If you're only going to call this operator from the callback, you don't really need to use an operator.

However, the reason that your operator fails is that it doesn't support execution rather than invocation.

Add a method called execute with (self, context) as the arguments. If you want to use the invoke() method's code, just call self.invoke and pass None for the event (be careful with this). The execute() method should return a set for the result just as invoke() does, so if you're using invoke's body, just return the result of self.invoke(context, None).

Finally, call the operator as 'EXEC_DEFAULT' instead of 'INVOKE_DEFAULT'

import bpy

class FooOp(bpy.types.Operator):
    bl_idname = "development.fooop"
    bl_label = "Foo"

    @classmethod
    def poll(cls,context):
        return True

    def execute(self, context):
        return self.invoke(context, None)

    def invoke(self,context,event):
        self.report({'INFO'},"running FooOp!")
        return {'FINISHED'}

def make_foo(scene):
    bpy.ops.development.fooOp('EXEC_DEFAULT')


bpy.app.handlers.render_complete.append(make_foo)
bpy.utils.register_class(FooOp)