What is the best algorithm for multiple matches?
Use an algorithm for bipartite matching.

Build a graph with one left-vertex per (user, fruit that user has) pair.  For instance, in the example above, we'd have one vertex for (User 1, Apples) and another vertex for (User 1, Bananas).  Add one-right vertex per user.  Draw an edge from (user $i$, $f$) to user $j$ if user $i$ has fruit $f$ and  user $j$ wants fruit $f$.

Now find a maximum matching in this bipartite graph.  The set of edges in that matching will be exactly what you want.

This does allow one user to be matched to multiple other users: for instance, the vertex (User 1, Apples) might be matched to the vertex User 2, and the vertex (User 1, Bananas) might be matched to the vertex User 3.