I don't think that moving it to es6-sham is appropriate.  It's fully functional on all the platforms that support it, and not defined at all if the platform is incapable.  That's exactly how we handle Map/Set right now.  (And, for that matter, WeakMap -- where "platform is incapable" means "on all platforms".)  So I think the present situation is fine.

Note that IE >= 11 implements `__proto__`, and `__proto__` is in the ES6 spec, so an implementation that relies on `__proto__` seems completely legit.