Дело в коннотации (эмоциональном оттенке) этих слов. У "опять" коннотация негативная ("опять двойка!", "опять ты пристал со своими расспросами!", "мне опять придётся туда идти..." и т.д.)
У "снова" такого негативного оттенка нет, скорее, даже позитивный ("я снова победил!", "мы снова туда поедем!" и тому подобное).
Так что, когда говорят "не опять, а снова", это означает что-то вроде: "не ной и смотри на ситуацию с позитивом", даже если эта ситуация не особо приятна.
Потому что слова хоть и совпадают в смысле повторяемости событий, но по происхождению они противоположны:
Опять — производное от (< пять) «пятка». См. вспять, пятиться, пятка.
Снова - Приставка: с-; корень: -нов-; суффикс: -а.
См. новый, обнова, сызнова.
К тому же стилистическая окраска разная, см: "Опять я дома" (всё то же самое), "Снова я дома" (наконец-то!).