If you'd really think about it, in English, it wouldn't be as confusing as it seemed.
For example, when we say "baby kangaroo", we're referring to a "kangaroo", a small, young, "infant kangaroo". We're using a noun baby as an adjective here. Generally, nouns can be used adjectively in English if put before another noun: "ice age" actually means "glacial", "winter bash" is "hibernal" (thanks, @oals). So does Japanese. 子 + animal
means "baby animal" because it's put before the animal name.
In personal name ~子, the 子 is but an ordinary noun child (or, girl). Thus words + 子
just means "—'s child" or "a child of —" or "a — child". Originally this naming convention was meant to be "a [adjective] (noble-)descendant", and why it becomes female name maker is a long history, please see @CollapsedPLUG's answer and link.
PS
~子 compound isn't limited to woman's names. It also has common usages:
- just as "[something] child":
みなし子【ご】 "orphan", 継子【ままこ】 "stepchild", 赤子【あかご】 "(old-fashioned) baby", 双子【ふたご】 "twins" etc
- or more sporadically as "the [something]-ed" or "[something] worker":
売【う】り子【こ】 "(extra) vendor", 切子【きりこ】 "rounding-off; cut glass", 踊【おど】り子【こ】 "(old-fashioned) showgirl", 店子【たなこ】 "tenant" etc.
proper noun
.