.parameter() works like this:  it walks all members of the class (anything added to self) and does one of three things with each member:

If the member is a parameter (something registered with register_parameter(...) or of type nn.Parameter), it adds it to the parameters list.
If the member is of type (or is a subclass of) nn.Module, .parameter() is called recursively.
Otherwise, it is ignored

In theory, you could add a 4th option to handle lists, but nn.ModuleList was chosen instead.