This question with an added constraint.
I'm willing to allow not-uniform selection as long as it's not to lop sided.
Given that "sets are typically implemented as binary search trees" and I expect they will contain some kind of depth or size information for balancing, I would expect you could do some sort of weighted random walk of the tree. However I don't know of any remotely portable way to do that.
Edit: The constraint is NOT for the amortized time.