Is there anyway to show all results in a view initially, but only show 1 result after user sets an exposed filter?
For the record, this seems like a really odd thing to want to do! How would you narrow it down to a single result if more than one matches the filter?

Anyway,  you should be able to use this hook:
https://api.drupal.org/api/views/views.api.php/function/hook_views_query_alter/7

If you check for the existence of filter values, you can then apply a "LIMIT 1" to the query.