But you're right that the "factory of factories" characterization is not exactly right (it's missleadingmisleading). Depending on what you mean by "different assembly lines" (and I can't be entirely sure I understood you well), that analogy is probably closer.
But, don't take the "factory" metaphor metaphor tootoo far.
The lines implement different algorithms (e.g. use different formulas for the simulation); as. As for the individual car models within each line, suppose the differences are determined by the actual data (state) stored in each instance (the private members effectively serve as parameters to the algorithm encoded by the class)1.
1 This detail about how the individual car models are represented is not that relevant to this discussion, except to illustrate that (for the purposes of this example) the hierarchy is organized around lines - i.e., there's a derived class for each line, and not for each model (this keeps the number of subclasses manageable).
So you have a number of parallel hierarchies (generally speaking, parallel hierarchies are not a great idea, avoid them if you can). At the root of each hierarchy is an abstract interface that represent each part; these interfaces let your main game code treat all of the concrete implementations in the same way, without having to worry about the different lines (in other words, the game code can just state what it wants to do in terms of high-level logic, without being obscured by interspersed lines of code that check for different lines in order to produce some special behavior).
The concrete factories that derive from it (ConcreteFactory1, ConcreteFactory2) encapsulate this knowledge for you. In other words, you write the creation logic for a certain car line in one place (in a concrete factory), and then whenever you haveinstantiate it, it gives you a little objectsobject that's kind of a "preset" for constructing car parts for a certain line. So, you'd have a LuxuryCarFactory, SportsCarFactory, EconomyCarFactory, etc.
One final point; you've said:
it is rather a Factory containing different assembly lines (luxury car assembly, sports car line, etc.)
You can infer this from what I've written previously, but it's worth mentioning it explicitly: an abstract factory doesn't contain different assembly lines (inheritance is not a containment relationship). Rather, it is an abstract view (or, in other words, a generalized view) of different assembly lines (concrete factories). The AbstractFactory interface just says "I'm an assembly line, and these are the services that I provide"; it doesn't reveal which assembly line it is. It lets you pick a factory for one line, and then hand it over (as a variable of type AbstractFactory) to other code that can use it to create individual parts, and then use those parts, without ever having to know anything about lines.
So, a variable typed as an AbstractFactory can represent any assembly line, but the instance stored in it is only ever a single assembly line, at any given point in time.