I've looked at the source for send_file and it does seem to propagate the MIME type from the function call to the rendering of the response. However, I've been bitten by Dancer::Test before. Since it's returning a filehandle instead of a rendered response I'd say it's not calling get_file_response_for_path from Dancer::Renderer, which is responsible for adding the Content-Type header. In short, don't expect Dancer::Test to mimic a real web app from end to end. It's there to allow you to test plugins and such. Regarding response_exists, that does seem like a documentation bug.
Finally, rest assured that Dancer *is* a mature framework. We use it at $work for many internal applications and we have never had serious problems.
The Dancer folk at #dancer on irc.perl.org are very responsive and friendly, be sure to check there if you have other questions.