One subtlety of having a built in concurrency model is that you avoid stripey programs[0]
If there is only one concurrency model, programs are built to match that concurrency model. If the model is in a library, you often have several competing concurrency models. This means that programs and libraries have "color" in the sense that some libraries only work with some specific other libraries. In practice, this divides a community into camps/clans/tribes where you can't readily share code between the camps. It leads to rewrites of perfectly fine code in order to make it fit into another model of concurrency.
Contrast with a system such as Go: by picking a concurrency model up front, you can be reasonably sure the library you are looking at will work without too many assumptions about the underlying structure.
Where such observations break apart is as soon as you look at Go's `context` package, or at Erlang's `OTP principles`. There, the underlying model is extended with certain rules. These rules make code able to coexist nicely in a system at the expense of giving the code color.
If you look at the design of good concurrency models, they make it easy to move code around in a project without having to worry about which process/goroutine/context that code ran in. This is the reason why you have no goroutine identity.
You could have made most of Go's concurrency into a library, but the model would be slightly more complicated. For 'select' to be a library, you need to have each case in the select be a first-class value you can pass around in the program and then you need a function which can combine these values into a single select case. A slightly weaker model is to have a select-this-event-ORELSE-select-that-event operator (see e.g., Haskell's STM and its `orElse` operator).
However, by making it into a library, you possibly made the program less efficient than a built-in solution. With enough compiler machinery, you may be able to get back most of this efficiency, but it is not a priori clear it outweighs the cost.
[0] This is a total aside: ever wondered why female cats have splotches of color males do not? Well, the color sits on the X chromosome of which the female cat has two. Early in the embryo, a deactivation process of one of the X's happens with about a 50/50 split. Cell growth then produces said cat, but depending on where the cell came from, fur has different colors. The same thing happens in human females, though there is no visible change due to this. And yes, it is completely irrelevant information, but I like to see programs as being stripey in this way, depending on what chromosomes it has.