From Michael B-S:
Here's how vimeo allows uploading of arbitrary large files (in their case, HD videos):
http://developer.vimeo.com/api/upload#http-put-uploading
In short, they create an upload ticket with its own url, have the user perform multiple PUT requests with binary data to it, and then finish the upload with a DELETE request on the ticket. There are also simple ways of validating the uploaded file.
There are some improvements that can be done over this, mainly allowing parallel uploads and having an md5 sum to validate not just the amount of files but also their correctness. Still, an interesting approach we could possibly adopt.