While that's true you could implement one that way, it's very nice to have the set operations implemented. Intersection, union, subtraction, etc. And having a uniform set type makes API signatures more consistent.
Plus you may be able to optimize Set<T> to use less space than Map<T, bool>.
I think I remember reading a claim that they pushed for a small API surface in order to make sure it got through. Now that it's part of the language, anyone else can work on getting those extra features in.
You can implement most basic functionality easily enough, MDN even has an example [0]. Although I agree that it should really be part of the language.
Plus you may be able to optimize Set<T> to use less space than Map<T, bool>.