Причина тривиальна: простота добавления / удаления строк.
Представьте следующий код:
int a[] = {
1,
2,
//3, // - not needed any more
};
Теперь вы можете легко добавлять / удалять элементы в список без иногда добавлять / удалять конечную запятую.
В отличие от других ответов, я действительно не считаю, что легкость генерации списка является веской причиной: в конце концов, для кода тривиально вставьте последнюю (или первую) строку. Генераторы кода записываются один раз и используются много раз.