Tanto para la barra de progreso como para la selección de tipos quizá te convenga usar flash. En concreto, net.FileReference:
http://blog.unijimpe.net/upload-de-archivos-con-flash/
(En javascript podés controlar la extensión, pero no evitar que seleccionen un archivo de la ventana; tampoco podrás manejar el progreso)