The IRenderer was a wash. I was unable to attach the actual object to the ControlTemplate and initialize it with the datacontext. Hence, not able to get the width.
Using the Custom Control approach, Since anything I arrange inside of this control are children of the controltemplate. I tried to get the ancestor from the Custom Control, which naturally is the internal GraphicElement. I then use reflection to get the GraphicElement and it's Symbol property. If it is a MarkerSymbol, set the X and Y offset. It seems to work, though I haven't yet tried to change the text of the label to see if it repositions correctly.
Reflection adds an undesirable overhead, though it can be reduced by reflecting the type in a static constructor, and accessing the propertyInfos and such from ArrangeOverride. Hopefully this will not affect all the symbols on the layer (one long label causes all the other symbols to have the same offset). Will update on progress.