Running two separate queries is the approach that makes the most sense to me.
You could run two queries such that one gets only exact matches, and the other gets only fuzzy results, such as:
- exact matches only:
purple car
- fuzzy matches only:
purple car~ -car
Which should make the sets mutually exclusive, so you don't have to go to the trouble of matching up the results of one query with those of the other. It also loses the ability to readily interleave fuzzy and exact results based on score, though. So whichever approach serves your purposes.
Also, if you just need to boost your exact matches to the top, query with both a fuzzy term, and a heavy boosted exact term should do this nicely, something like:
purple car~ car^100