Как проверить скачан ли файл?
Только если отдавать архив через php, но это не хорошо т.к нагрузка будет не нужная. 
Сделать нужно следующее, когда вы отдаёт файл пользователю, через php, то читайте его кусочками. И сохраняйте в буфер кол-во отданных байт, как кол-во отданного будет равно размеру файла, то файл можно считать скаченным и соответственно произвести удаление. Но если вы хотите ещё поддерживать докачку при обрыве соединения, то нужно ещё учитывать заголовки смещений при докачки и дополнять буфер уже оданными байтами ранее, при предыдущей сессии. Ну вот как-то так...
Или второй вариант, по факту обращения к ссылки на скачивание, помечайте файл, как якобы скаченный, и потом скажем через 24 часа удаляете его.
KorsaR-ZN спасибо за направление, получилось вот что:...
$file = 'file.zip';
header('Content-Description: File Transfer');
header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename=' . basename($file));
header('Content-Length: ' . filesize($file));
$f = fopen($file, 'rb');
while (!feof($f)) {
    echo fread($f, 8192);
    flush();
}
fclose($f);
unlink($file); 
...
уж не знаю насколько это правильно...