Well, it is possible to override a non-existent property (if you don't mind the warnings). Here's a sketch which uses a tag to center a grob. (I realize it will break with very little effort.) And with this, my descent into hackishness is complete . . .
\version "2.14.2"
#(define ((center-between tag extra-Y-offset) grob)
(let* ((refp (ly:grob-system grob))
(all-grobs (ly:grob-array->list (ly:grob-object refp 'all-elements)))
(X-extent (lambda (q) (ly:grob-extent q refp X)))
(targets (filter (lambda (q) (equal? (ly:grob-property q 'tag) tag)) all-grobs)))
; center between right of grob to left and left of grob to right
(cons
(- (- (interval-center (X-extent grob))
(/ (+ (cdr (X-extent (car targets)))
(car (X-extent (cadr targets))))
2)))
extra-Y-offset)))
\relative c' {
\once \override Staff.TimeSignature #'tag = #"hello"
\once \override TextScript #'extra-offset = #(center-between "hello" 0)
c^"hello"
c c
\override Staff.BarLine #'tag = #"hello"
c
}