This is just a wild idea. I've never actually tried it...
For same-server downloads, you could try creating a download.php script that takes a query string parameter. Then change all your public download links to point to that script with a different value for each file. One example could be...
http://www.example.com/download.php?file=123
Then create a table called Download that stores the ID number used in the query string, the actual filename, and a download count. When the script is called, look up the file from the ID, increment the download count, then redirect to the file.
Has anyone ever tried something like this?