There are a few ways to deal with this, but it really depends on how you have the rest of your sections set up. If the structure is exclusively products with only a single root level item called "products" then I would probably suggest storing content for the products overview page somewhere else. This will greatly simplify your products structure (you could even change it to a 'channel' if there is no other reason for the hierarchy). Where you decide to store the product index/overview info is up to you. You could, for example:
- create a single called "products" (with uri '/products'), or
- add it to the "pages" structure as "products" (with a custom Entry Type "products"), or
- create a template "products/_index.html" with description fields, etc. stored in a global set called "productsDescription" (or whatever you like).
Whichever way you choose the product index page will still be "/products/" and the product detail pages will still be "/products/product-slug/".
If you do decide to place the products overview in the "pages" section, for example, you can just check for the entry type using a conditional or switch
statement (within the 'page/_entry.html' template), like so:
{% if entry.type == "products" %}
{# display products index page template here #}
{% endif %}
However you decide to do it, you can load the actual products like so (as Marion suggested above):
{% for product in craft.entries.section('product') %}
{{ product.title }}
...
{% endfor %}