Multiple classes in a single library with shared functionality?

Your question is a bit convoluted. It is hard to answer. In particular it sounds like a general C++ question rather than something relating to the Arduino in particular. If you were to give a more real-life example, it would help, rather than:

I want a library that has at least two classes ...
I will call them:-
CountAndCompare
Counters

I don't particularly like the notion of an instance of a class modifying other instances of the same class. That sounds circular.

It sounds to me like you have a container (Counters) which contains things. The functionality of counting the things should be in the container, not the thing.

You may want to look into the STL (Standard Template Library) which implements many different types of containers, for virtually any "thing" inside the container. There is an implementation of STL on the Arduino.

I know you can pass pointers to classes. My gut says that I would want bar to instance foos but I'd be worried that foo would only scope to bar. When an instance of bar is declared you could tell it how many foos you want.

I think to do that, you would need the foo class already defined and prototyped in the bar class header.

A more concrete example, again, would help.