Sie müssen nur diejenigen ausschließen, die sowohl direkte Freunde als auch Freunde von Freunden sind. Ich habe die Tabellenaliase neu angeordnet, damit es (zumindest für mich) etwas klarer ist, was abgerufen wird:
SELECT
u.*
FROM
user u
INNER JOIN friend ff ON u.user_id = ff.friend_id
INNER JOIN friend f ON ff.user_id = f.friend_id
WHERE
f.user_id = {$user_id}
AND ff.friend_id NOT IN
(SELECT friend_id FROM friend WHERE user_id = {$user_id})
Außerdem entfällt die Notwendigkeit, die abgefragte Benutzer-ID auszuschließen.