I've been playing around with your function and experimenting with ways to automate calculation of the whiteout box extents. I recast it to accept offsets from the current line-width, so I think there is more flexibility, less need to guess. Leave a number in the input list at 0 and the function will use, in this case, 108.120472440945 -- you could see tiny traces of the hairpin at the line ends :)
Not sure about calculating the other end of the whiteout box (from position of the barline, I suppose).
\version "2.14.2"
eraseBrokenHairpin =
#(define-music-function (parser location extent)(list?)
#{
#(define ((hairpin-eraser extent) grob)
(ly:stencil-add
(ly:hairpin::print grob)
;(stencil-with-color (ly:round-filled-box extent (cons -1 1) 0.0) red)))
(stencil-with-color (ly:round-filled-box extent (cons -1 1) 0.0) white)))
#(define (hairpin-callback grob)
(let* ((orig (ly:grob-original grob))
(siblings (if (ly:grob? orig)
(ly:spanner-broken-into orig)
'() ))
(line-width (ly:output-def-lookup (ly:grob-layout grob) 'line-width)))
(define (recursion-helper ls1 ls2 ls3)
(if (or (null? ls1) (null? ls2))
ls3
(append ls3
(list
(if (and (>= (length ls1) 1)(eq? (car ls1) grob))
(if (equal? (cons 0 0) (cons (car ls2) (cadr ls2)))
(car ls1)
(ly:grob-set-property! grob 'stencil
(hairpin-eraser (cons (- line-width (car ls2)) (- line-width (cadr ls2)))))))
(recursion-helper (cdr ls1) (cddr ls2) ls3 )))))
(define (recursion lst1 lst2)
(recursion-helper lst1 lst2 '()))
(recursion siblings $extent)))
\once \override Voice.Hairpin #'after-line-breaking = #hairpin-callback
#})
%----------------------- Test
%--------------------------------------------------
\relative c' {
\override Hairpin #'color = #red
\key ces\major
\eraseBrokenHairpin #(list 41 23 15 0 13 0) ;; recast as offsets from line-width
c'1\<
\break
\key cis\major
d2 e
\break
\key es\major
\time 2/2
f g
\break
\key e\major
\time 4/4
a b\!
}