||It's not really a code based solution. It's more a service design based solution.
In your MXD, say you have a source layer SDEDBO.Centerlines.
Add the layer to your map twice. The top one, renamed to "StreetLabels1". The bottom one renamed to "Streets".
For StreetLabels1, do all of your labeling as you want for your first iteration of label options, but turn off all of the symbology. For "Streets" do all of your symbology but turn off labeling.
Now, add SDEDBO.Centerlines to the map again, rename it "StreetLabels2"; place it below "StreetLabels1" and above "Streets". Turn off all symbology for that layer and do your labels in your second iteration of label types. Keep doing this for as many iterations of labels as you want. Your users will only be able to select label formats that you have created in the source document in this manner.