Curved arrow of variable thickness to connect to objects
I think you're looking for a scripted solution which allows you to define two points and the direction of the Curve. Remember; the thickness and colour of such Curves can be animated at a later stage, and the Arrow or 'direction indicator' of the Curve is another matter.

The concept is each box you want to connect has an edge which will be a terminal for the Curve.



Exactly how you determine the length of these virtual guide lines is up to you, it could be some factor of the relative distance between the two terminals on the boxes -- really that's down to taste.

The script would create something like this, if you give it two terminal coordinates, and a direction for each.



If you look at the source of the TubeTool addon you'd get a fair idea of how to script it, but the core of the code is this snippet.

import bpy
from mathutils import Vector

def add_curve(medians, normals, curvename, amp=2):
    curvedata = bpy.data.curves.new(name=curvename, type='CURVE')
    curvedata.dimensions = '3D'

    obj = bpy.data.objects.new('Obj'+curvename, curvedata)
    obj.location = (0,0,0) #object origin
    bpy.context.scene.objects.link(obj)

    polyline = curvedata.splines.new('BEZIER')
    polyline.bezier_points.add(1)
    #   polyline.use_smooth = False

    # obj.data.fill_mode = 'FULL'
    # obj.data.bevel_depth = 0.1
    # obj.data.bevel_resolution = 4
    point = polyline.bezier_points[0]
    co = medians[0]

    point.co = co
    point.handle_left = co - (normals[0]*amp)
    point.handle_right = co + (normals[0]*amp)

    point = polyline.bezier_points[1]
    co = medians[1]
    point.co = co
    point.handle_right = co - (normals[1]*amp)
    point.handle_left = co + (normals[1]*amp)

    polyline.order_u = len(polyline.points)-1  

medians = [Vector((-2, 0, 0)), Vector((2,3,0))]
normals = [Vector((0, 2, 0)), Vector(( -2, 0, 0))]  
add_curve(medians, normals, "curvename", amp=1.2)  


And that gives (with the extras commented out, like thickness) this:




medians: Absolute coordinates, Vectors. (Location)
normals: Relative to the median they're associated with. (Direction, and Distance away from Location)
amp:  'push factor' for the control point. The amp parameter pushes the control points along the normals, effectively scaling the control points to be further away or closer to the terminal)