1) Попробуй выдать такие заголовки:
Там, где Content-Type, добавить имя файла через точку с запятой, хотя не знаю обязательно ли, а экспериментировать самому лень:
header("Content-Type: $content_type;name=$filename");
А также еще один заголовок:
header("Content-Disposition: attachment; filename=$filename");
Не уверен, обязательно ли слово attachment, может быть можно просто:
header("Content-Disposition: filename=$filename");
Причем опять же, может быть, что достаточно одного из этих заголовков, надо бы было просто поэкспериментировать с разными браузерами и качалками.
2) Дозакачка вообще сложный вопрос. Как я понимаю, специально для этого придуман заголовок Content-Range:
header("Content-Range: $start-$end/$size");
Интересно, как узнать от клиента этот $start...
То-есть, может быть, что-то и можно было бы придумать, но сильно геморно... А ведь некоторые качалки еще по частям качают...
Не стоит мучаться.
3) MIME-типы можно посмотреть, например, у Апача в файле mime.types