I have experimented a bit more with this, and I've gotten a bit further. However, I'm not sure if I'm going down the right path.
I have forked SpreadhseetView so that I can mess around with its internal state while experimenting. What I'm doing is to wrap the cellsView in another pane, and I can then put the overlay widgets in that pane.
However, these widgets have two problems:
1) They will of course not scroll with the background, and
2) They overlap the headers
It appears the implementation of VirtualFlow uses manual clipping to ensure that cells don't overdraw the headers and the scrollbars, and then somrhow moves the clip when the cells are scrolled. I don't fully understand that part yet.
So my current question is: Does any of this ring a bell? Is this the approach that should be taken?