Family object picking works like normal object picking: if you have
+ Family Red 'Health' less or equal 0
-> Destroy Family Red
then only objects from the family Red with 'Health' <= 0 get destroyed. They shouldn't all be indiscriminately destroyed. If they are, it might be a bug, so upload a .cap showing this behaviour and I'll take a look.
The way family private variables work is like this. Suppose you have 'SpriteA' and 'SpriteB' in family 'Red'. The private variables available in Red are the ones common to both SpriteA and SpriteB. So if you have:
SpriteA's variables: VarA, VarB, VarC
SpriteB's variables: VarA, VarB
then via the family Red, you can access VarA and VarB, because all objects in the family have them. You can't access VarC: if you did 'Set VarC to 5', SpriteB doesn't have a VarC, so it's impossible to carry out this action. However, in ordinary non-family events referring to SpriteA, you can still use VarC like a normal private variable.
The Family Manager dialog allows you to add and remove private variables to all the objects in the family at the same time. If you have 17 objects in family Red and you want to have a new variable 'VarD', you don't want to have to add 'VarD' individually to 17 objects. So you just hit 'Add new family variable' and add 'VarD', and it adds it to all of them. Because all of them have the variable in common, it becomes a family variable.
I should note families keep a separate record of which objects are picked in the events. So if you have:
+ Bullet collides with family 'Red'
-> Destroy SpriteA (which is in family 'Red')
then this event treats SpriteA as unpicked by the event, so all SpriteAs will be destroyed. If you want to use only the objects affected by the event, choose an action under the 'Red' family in the event wizard (eg. Family 'Red': Destroy).
Hope that explains it!