Updating objects parameters using python creates multiple objects
Swap out the mesh

Just like the font change handler is swapping out the body of the font, ie the data part of the text object, can do same with meshes.
Proof of concept
Use the create surface operator to create an object stepping along v changing the steps and the point to step to, max.
After each call, save the mesh, remove the object.
Script to create the meshes via operator
import bpy
from addon_utils import enable
from math import pi

from bpy import context

enable(&quot;add_mesh_extra_objects&quot;) # make sure addon is enabled

# default 4pi in 128 steps
step_value = pi / 32
steps = 10
for step in range(1, 129, steps):
    bpy.ops.mesh.primitive_xyz_function_surface(
        range_v_max=step * step_value,
        range_v_step=step,
        )
    me = context.object.data
    me.name = f&quot;XXXX{step}&quot;
    me.use_fake_user = True
    bpy.data.objects.remove(context.object)
        

After running this script have a number of &quot;XXXX&quot; meshes
&gt;&gt;&gt; D.meshes['XXXX
                  1']
                  101']
                  11']
                  111']
                  121']
                  21']
                  31']
                  41']
                  51']
                  61']
                  71']
                  81']
                  91']

Now simply a case of writing a handler to use these.
Handler to swap in the meshes created
import bpy

def swap_ob_mesh(ob_name, mesh_base_name):
    
    def handler(scene, depsgraph):
        ob = scene.objects.get(ob_name)
        f = scene.frame_current
        me = bpy.data.meshes.get(f&quot;{mesh_base_name}{f}&quot;)
        if ob and me:
            ob.data = me
            
    return handler

# while testing
bpy.app.handlers.frame_change_post.clear()
        
# test call

bpy.app.handlers.frame_change_post.append(
        swap_ob_mesh(&quot;Cube&quot;, &quot;XXXX&quot;)
        )

Notes: IMO never mix context and handlers. When it comes to render most likely wont work.
Consider shape keys.  If instead simply ran the operator only changing v max (not steps) if all the meshes produced have the same number of verts / edges / faces simply join them as shapes and animate the shape key.
To demonstrate the &quot;stepping&quot; nature of swapping the mesh have used 10 frame steps.  Reducing this to 1 will be as smooth as it gets.
On a side note this is a &quot;proof of concept&quot; scrubbing the timeline may produce unexpected results since the mesh is only swapped when exists.