In мы купили продуктов на сто долларов, why is продукт in the genitive plural (продуктов), not accusative plural (продукты)?
I think this is not genitive but, rather, partitive case. Its meaning is 'some quantity out of a larger quantity'. For the same reason one should say 'Я налил себе чаю', not 'Я налил себе чай'.
Sadly but inevitably, partitive (as well as the remnants of some other ancient cases, e.g. locative) is gradually falling into disuse. One is very unlikely to come across phrases like 'Я вышел из лесу' these days.
There is a little difference between "Мы купили продуктов" and "Мы купили продукты".
"Мы купили продуктов" means that we bought some food in generl as Matt wrote in his answer, and the person we talk to doesn't know exactly what food we bought.
"Мы купили продукты" implies that we bought that very food we had spoken about earlier, and the person we talk to knows what food we bought.
Well, actually you may choose either Accusative or Genitive case freely. That's rather a matter of taste, I believe.
Genitive case is used to denote some "indefinite" object, i.e. Сходи, купи масла --> Go buy some butter. Yet as "продукты" stands for some "food in general" then Genitive case doesn't add much sense here. Anyway, we all used to go with Genitive, so it sounds more natural IMO.
Genitive case is a trace of “some amount of” («некоторое количество») being omitted here.
A full variant must be:
Мы купили [некоторое количество] продуктов на сто долларов.
where parts are linked together in the following way:
купили количество(noun-to-noun with expected Accusative case) —
bought (an) amount;
количество продуктов(noun-to-noun with Genitive case) —
(an) amount of products.
Such ommission of «некоторое количество» is widely used in Russian. It may be easily recognized either by a context or by such Accusative→Genitive case substitution.