удаляются все блоки когда один из них закончил анимацию
Удаляется один. А у остальных анимация сбрасывается. Потому что анимация привязана к порядковой позиции элемента внутри родителя относительно соседей. Убрали первый, у остальных позиция изменилась, анимация сбросилась - поэтому кажется, будто элементы были удалены (а новые внезапно добавились).
Анимацию надо привязывать к чему-то, что своего значения не изменит. Например, можно добавлять элементам дополнительные классы вида
block-*, и так же через
@for генерировать для них css, как сейчас у вас это делается для
:nth-child(*).
Например.