The way I set it up for Windward, is each GameUnit in the world references a corresponding UnitHUD on the HUD panel (which can be added dynamically if it doesn't exist). The UnitHUD is used to display the unit's health bar, and it also references a pair of HUDText scripts. One for damage indicators, and one for messages (notifications and such). When I want to display a message above the unit's head, I do unit.hud.messageText.Add("SomeMessage", color, duration), where 'duration' is how long I want it to stay 'sticky' until it starts floating away. It's useful for crits and such.
What does the HUDText script does inside its Add function? First it checks to see if the previous text message and the current text message are both numeric. If so, it adds the new message to the old message instead (this way 10 hits in a second go into the same label). If not, it creates a new label entry and keeps track of it (when it was created, how long it's supposed to stay sticky). Inside the update function it simply moves the label upwards if it's time to do so, and eventually fades it away and finally -- disables it. The same label is reused for the next HUDText.Add call so that the memory is reused rather than re-allocated.
End result is what you see in Windward. Hint: you can talk by pressing 'enter'.