I won't argue that Elm does anything other than an exemplary job at #3, but it is worth noting that there are some interesting efforts to build similar functionality in PureScript libraries:
To me, this is the benefit of PureScript - yes, you have to do a little more work, because you don't get these things for free from the compiler and tools, but you gain complete control over your application structure. You're not forced to work in some ambient Signal category.
https://github.com/paf31/purescript-thermite
https://github.com/kRITZCREEK/reactive-psc
https://github.com/bodil/purescript-signal
https://github.com/michaelficarra/purescript-demo-mario
https://github.com/mechairoi/purescript-frp-rabbit
To me, this is the benefit of PureScript - yes, you have to do a little more work, because you don't get these things for free from the compiler and tools, but you gain complete control over your application structure. You're not forced to work in some ambient Signal category.