Not really an answer, but too long for a comment...
To pick up the "next available" join feature, as you say, you would have to eliminate the already-joined features. This means that you would have to run the join one feature at a time, eliminating the joined features after each single feature has been joined.
Then after each join, append the resulting one feature to the final join feature class.
However, I assume that you'd want to be very careful about the order in which your selected the individual feature to join each time, as you'd probably want the closest joins to be done first, otherwise they may never happen at all - ie, if they were otherwise also closest (but not as close) to another feature.
So you may want to to a reverse spatial join first, to determine the distances between each join, then order the features by distance, then select each feature one-at-a-time, doing a (forward/normal) spatial join on just the one selected feature, then append the results each time (or merge all the results at the end).