How to colour vertices of a beveled curve mesh without converting to mesh?
Check use UV for mapping in the curve tab (this act as unwrapping the curve mesh ):



use the U input from the texture coordinates node to control the color using ColorRamp node along the curve :



render result 





UPDATE 
It seems that the UV space is divided equally between the bezier points , and using this info we can use the ColorRamp to assign a color to each point using knowing its order in the spline :


the number of elements in the color ramp should be the same as the number of bezier points
distribute the color ramp elements evenly
the color of each bezier point is the color of its corresponding element in the color ramp


this is a curve with 3 splines each spline has each own material :



using the previous idea gives the following result( color-ramp interpolation is set to constant to show thee relation between elements and bezier points ) :



Scripting : the following code has been used to create the last image materials

assuming you have


a dictionary of points' colors
material slot for each spline
-each material has a ramp node ( the material should be as the previously used one ^)




import bpy

curve = bpy.context.object

colors = {  0 : [(0,0,1,1), (0,1,1,1), (1,0,0,1), (1,0,1,1), (1,1,0,1), (1,0,1,1), (1,1,0,1)],   
            1 : [(0,1,0.3,1), (0,0,1,1), (1,0,0,1), (1,0,1,1), (1,1,0,1), (1,0,1,1), (1,1,0,1)],
            2 : [(1,0.4,1,1), (0.8,0,1,1), (0.5,0.5,0,1), (0.6,0,0.2,1), (1,1,0,1), (1,0,1,1), (1,1,0,1)]
         }

if curve.type == 'CURVE' :
    i = 0
    if len(curve.data.splines) &lt;= len(colors) :
        for spline in curve.data.splines :
            spline.material_index = i
            color_ramp = curve.material_slots[spline.material_index].material.node_tree.nodes['ColorRamp'].color_ramp
            l = len(spline.bezier_points) -1

            for e in range(1,l) :   # if i&gt;0  create new color elements
                color_ramp.elements.new(e/l)
                print(e/l)
                color_ramp.elements[e].color = colors[i][e]

            color_ramp.elements[0].color = colors[i][0]
            color_ramp.elements[-1].color = colors[i][0]

            i+=1