The whole point though is that the ID itself leaks info, even if the profile is not public. There are many cases where you reference an object as a foreign key, even if you can't see the entire record of that foreign key.

I can't think of any.

Sending a friend request is an obvious example.

Ok but in that case, why not use the user ID as the primary key?