My approach to this would be to have the unit object request UNIT_HEALTH messages from my event distributor when the arg1 is the unit object's self.PartyID. The unit object would maintain it's own knowledge of it's current health based on the events it receives.
Then, when I want to ask it for it's health percent, I would call math.floor(unit:HealthPercent()) which would probably be implemented something like this:
return self.health / self.maxHealth * 100
One thing to consider with trying to find a unit's health percent is that if the unit is NOT in your party or raid, then UnitHealth() already returns the health percent, not the absolute health. However, since UnitHealthMax() always returns 100 when the unit is NOT in your party or raid, then the math still works out ok ;)