You can write composable WebGL, but it takes more work. Here's my Loop-Blinn example: http://cscheid.github.io/lux/demos/loopblinn/loopblinn.html
The bits that do Loop-Blinn are here, https://github.com/cscheid/lux/blob/master/src/lux/text/outl..., while the bits that decide the color of the text go elsewhere.
Look at 'unconed's MathBox for this kind of thing taken to incredible heights, or https://github.com/kovasb/gamma for the ClojureScript analogue.