Lets address the last one first.
Assuming that the above isn't totally stupid is there a way to reference an instance of a variable using its parent class def and an ordinal?
IE if foo3.myvar is the third instance of foo is there a way to say myvar[3] or perhaps foo::myvar[3]
The answer is no. foo3.myvar is not the third instance of foo. foo3 might be. foo3.myvar is field belonging the foo3 instance.
You can create arrays of instances of classes, just like arrays of ints or arrays of chars.
foo myfoos[3];
Will create an array of instances of the foo class, assuming that there is a no-argument constructor. If the class constructors takes arguments, then the constructors need to be implicitly invoked.
foo myfoos[3] = { foo(12), foo(23), foo(-99) };
(Assuming that foo::foo() has one argument of type int.)
Counters will have a single method, Update, and will only be instanced once but when Update is called it will need to modify 1 or more instances of CountAndCompare variables.
As laid out, neither class knows anything about the other class, or instances of the other class. So, that will not be possible.
Now, if Counters was somehow informed about the instances of CountAndCompare as they are created, or it causes their creation, then it could invoke methods on the instances.