You can just as easily use two joins of the same table with different references. You'd want to capture the username, so you'd have a case or if statement in the SELECT clause to account for it. Something like:
SELECT f.*,
CASE f.`Friend1` WHEN '<userID>'
THEN u2.`username`
ELSE u1.`username`
END AS `username`
FROM `friends`
INNER JOIN `user_usr` AS u1
ON f.`Friend1`= u1.`id`
INNER JOIN `user_usr` AS u2
ON f.`Friend2` = u2.`id`
WHERE f.`AreFriends` = 'y'
AND (f.`Friend1` = '<userID>' OR f.`Friend2` = '<userID>')
Now, <userID> would be the userID associated with the current user (so for me that would be 163486 for this forum).
Now, the SQL is easy to understand. You're just bringing the user information in twice so that every user ID gets a name associated with it. That's the two "INNER JOIN .... " clauses. We create references to them using "AS u#" to which we use in the SELECT and WHERE clauses.
The SELECT clause gets everything from the friends table, and a nifty CASE statement which says the following
WHEN Friend1 has the associated userID of <userID> THEN we use u2.username ELSE use u1.username and store that as the column "username".
So now, if you ran that, you should be able to do a quick dump of usernames and have only those friends that have accepted for that user.
Hope that helps.