How to get Enumerations correctly right aligned
You can use layout.split() to split a row into two columns based on percentage. The first item on the row uses the percentage of the width specified in the split, then the following items use the remaining width.

Then by adding the label as a separate item to the menu you get each in their own column.



class testPanel(bpy.types.Panel):
    bl_label = "Test Panel"
    bl_idname = "OBJECT_PT_tester"
    bl_space_type = 'VIEW_3D'
    bl_region_type = 'UI'

    def draw(self, context):
        layout = self.layout
        obj = context.object
        box = layout.box()

        col = box.column()
        title_size = 0.6

        row = col.split(percentage=title_size, align=True)
        row.label(text='Character Mesh')
        row.prop(obj, "mesh_type",   text='')

        row = col.split(percentage=title_size, align=True)
        row.label(text='Rig Type')
        row.prop(obj, "rig_type",    text='')

        row = col.split(percentage=title_size, align=True)
        row.label(text='Weight Variant')
        row.prop(obj, "weight_type", text='')