Force redraw / update of curve object
What you are trying to do is already possible using a hook modifier. Manually you can go into edit mode, select a point and press &#9096; CtrlH->Hook to new object. This is also available to mesh objects which hooks the new object to the selected vertices.

We can create hooks using python. I'm not sure we can do this without the hook_assign operator, so we need to select the specific point and be in edit mode when we assign the point to the hook.

import bpy

obj = bpy.data.objects['BezierCurve']
# select and make it active (for later edit mode)
obj.select = True
bpy.context.scene.objects.active = obj

b_points = obj.data.splines[0].bezier_points
for p in b_points:
    p.select_control_point = False
    p.select_right_handle = False
    p.select_left_handle = False
b_points[0].select_right_handle = True

# create empty to hook to
hook_obj = bpy.data.objects.new('Hook', None)
bpy.context.scene.objects.link(hook_obj)
hook_obj.location = obj.matrix_world * b_points[0].handle_right

bpy.ops.object.mode_set(mode="EDIT")
hook_mod = obj.modifiers.new(name='Hook',type='HOOK')
hook_mod.object = hook_obj
bpy.ops.object.hook_assign()
bpy.ops.object.hook_reset() # needed if handle is not a 0,0,0
bpy.ops.object.mode_set(mode="OBJECT")