I think you're right, Ben. All the lambda expressions before the .subscribe are "pure" in the sense that they are deterministic functions: straight mappings from inputs to outputs with no extraneous information pulled from the environment and no side-effects pushed to the environment.
In some sense, "println" can be viewed as a pure function, since it always produces "nil" (assuming it doesn't throw an exception), but it's not called for its ability to produce a value, it's called to produce its side-effect. This is exactly the kind of thing Haskell handles with the IO monad, which passes around a fictional object that maintains the "state of the world." When you do side-effecting operations on the world, the IO monad's "bind" operator does a transformation on that conceptual "state object," so if you do the same thing twice, you get the same answer twice (but why would you? :)
The little book "Learn You a Haskell for Great Good" I think has hit a sweet spot of showing numerous small examples that clear the fog on all this pure-versus-impure stuff and makes it really easy to understand monadic operations without getting caught up in weird analogies and vaporous abstractions.
The Rx design is based on Erik's original observation that Observable is the categorical dual of Enumerable. This is amazingly cool because it means we don't have to invent the query language, by-and-large (we do have to worry about concurrency, throttling, delays, and time-dependent things, but map, mapMany, filter, all the monadic transforms go over with virtually NO change).
Now, Elliott's FRP and FlapJax introduce two kinds of things: "events," which are very like our "observations," my term for things that observables produce and that observers consume; and "behaviors," which I admit I do not understand. They are some kind of more continuous time-varying gadget, but it will take a dedicated effort to understand Elliott's paper or FlapJax's programming model. I think it's highly likely that Elliott and FlapJax have a LOT in common with Rx, but that analysis has not been done. For me to find it satisfactory, we have to account for Erik's discovery, which, in my view, LIMITs the acceptable freedom in design space to those things with duality arguments behind them. The category-theory justification behind Rx is just too strong to be ignored, and I think the burden of justification rests on innovations outside Rx: you gotta show where it comes from, how it fits, and why we need it. At least, those are the questions I would ask myself if I undertook to understand Elliott or FlapJax all the way.
For now, I need to "get things done." Rx's model is REALLY easy to explain and teach: I just tell people that everything they know from SQL or from LINQ or from functional programming (pure or applied) is RIGHT. The barrier to entry is very low, and as soon as people get to start throwing away their thread-switching and locks they rejoice and are sold. That's a pretty good track record for something so young. But, yes, Elliott's paper is on my bucket list.