если очень-очень нужно, то можно отдавать файл скриптом. типа
/getfile.php?id=12345
а на сервере $filename = get_filename_by_id($_GET['id']);
readfile($filename);
// увеличиваем счетчик
// profit!
вы будуте уверены что вы его отослали (но не факт, что клиент его принял)
и это несколько увеличит нагрузку.
другой вариант — давать юзеру ссылку на скрипт, который увеличит счетчик, а потом редиректнет на файл.
но опять-таки, вы не будете уверены в том, что клиент таки принял файл.
в случае с картинками, их можно показывать в браузере, а на onload картинки отсылать сообщение на сервер. при желании, можно на клиенте даже проверить целостность картинки.