HitBox Layering...any recommendations?

Currently I am using RaycastAll along with LINQ to order the hits by distance. I am also using LINQ to pull out the unique top level HitBoxes followed by a sublist of internal HitBoxes.

The current setup is:
Target → TorsoHitbox → HeartHitbox

TorsoHitbox.OnHit() is called which determines if the bullet passes straight through. It adds either 1 or 2 OpenWounds depending on this result. HitBoxTorso.OnHit() then processes the OnHit() function for the sublist of internal HitBoxes. It then returns true or false depending on if the Bullet passed through and is allowed to process hits on another Targets HitBox.

If False is returned by Torso, hit processing returns early.
If True is returned by Torso, hit processing continues on parent HitBoxes and their sub hitboxes.

Is there a more elegant way of doing this?

Bullet Hit process