Something like the following code. Note that it's too early in the morning, and I may have got the concatenation of transformations back to front.
procedure(BunnyTraverseHierachyForVias(cellView @optional (transform '((0 0) "R0" 1))
; make sure that the concatenation is the right way around...
BunnyTraverseHierarchyForVias(inst~>master dbContactTransform(transform inst~>transform))
) ; foreach
) ; procedure
The idea is that the BunnyHighlightVias is your current function, which identifies the single vias in a single cellView. The additional transform argument is to allow you to transform the coordinates for the via location into the coordinate system of the top level cellView, and then place the highlight in the right location.
As you can see, it's a simple recursive function which will traverse the hierarchy. To keep it simple, I've not worried about mosaics - I'll leave that as an exercise for you, should you have any mosaics in your design.