Life on hit is one of the many ways of gaining like in Diablo 3 (besides life steal, heal spells, potions, health globes, life regeneration). You also restore all your life when you level up, kill a boss, quit/rejoin the game, and receive a blessing.
How does it work ?
Every time a monster is affected by your attack or a spell, you gain life. The amount of life that you gain is calculated as follow:
life_gained = life_on_hit * nb_monsters_hit * skill_modifier
life_on_hit is the total life on hit that you have from your gear
nb_monsters_hit is the number of monsters affected by your attack or spell (if you cleave and hit 3 enemies, then it's 3)
skill_modifier is ticky: every spell in the game has a modifier attached to it, and its a number between 0 and 1. It is used to balance some spells. If that modifier didn't exist, some spells would give you too much life on hit and be overpowered as a result.
Also note that nb_monsters_hit may be capped for some skills, thought not sure, hitting more than 3 enemies with cleave does not give you additional life_gained.
The modifiers for each skills can be found here: for barb, monk & dh, for wizard.
Why are you getting +20 numbers instead of the +10 life_on_hit that you have ?
The heal numbers that appear on your character are aggregated over time to be more readable. As I said in my comment: If you attack two times between each tick, the next tick will be the sum of the total life gained since the last tick (the two attacks).
If you want to know how much life you get from 1 attack, just hit once and wait for the number to show up.
The heal numbers may also benefit from crit (sometimes they have the crit animation). But I don't know much about that.