Shaders are a step in the pipeline. Beginners should be learning the pipeline:
1. Geometry is instantiated and draw parameters set.
2. Geometry vertices are transformed by a vertex shader.
3. Transformed vertices in primitive are used to sample across its geometry, producing pixel fragments.
4. Pixel fragments are transformed by a fragment shader.
5. Transformed fragments are written to a framebuffer.
That's the whole thing, and GLSL neatly handles 2-4. Step 1 is a kinda pain in the ass, but not terrible. Step 5 is usually simple, but no worse than 1. We shouldn't be protecting users from dealing with the (simple) facts of life in a graphics pipeline.
As for Javacsript not having multi-line strings...that's hardly the fault of WebGL, and honestly the simplicity of passing around strings means that as the language gets more interesting support (for interpolations and whatever) the API will be unaffected.