Have a habtm self join to save the relation.
You might be selling dining chairs and tables. This would allow
you to specify a new product such as a dining set that consists of
6x chairs and 1x table.
The relation would be something along the lines of
id, name, ...
1, chair
2, table
3, set
id, product_id, other_product_id, quantity, created,
modified
1, 3, 1, 6, ... // 6 chairs
2, 3, 2, 1, ... // one table
The cost and price comes from the sum of all the products
linked, but can be overloaded (cost could possibly remain
calculated from the other products).
Other things like stock could be removed directly from the
related products, and the stock status for the set (id 3) could be
calculated based on the availability of the other dependent
products.
I don't think it would be required to create products from these
products. It would just be one level deep.