1. If you group dogs into litters using a Litter join table, you'll be able to take a count of them. This join table would actually be an intermediate in a kind of Dog-Dog self-join. Where one side is the parents and the other is the pups.
Dog -< Litter -< Pup
In this structure, each dog can be both a pup and a sire, at different times in its life.
To find the number of litters is then a matter of searching the Litter table, maybe using a date range search on the Birth Date.
2. Unless you've got a lot of in-breading going on, your dogs should have four grandparents.
To see the grandchildren of a dog, you can use that relationship I described above, and extend it one more level, like this:
Dog -< Litter -< Pup -< PupLitter -< GrandchildPup
alright, maybe not the best names.
In this case, PupLitter is just another TO of Litter, and GrandchildPup is just another TO of Dog.
Now from the top, you can easily see down the chain to GrandchildPups; list them in a portal, or simply count them with an aggregate calc.
3. Sorry, I don't know this one. What file format has repeating fields other than FileMaker??