The trick is to be able construct it in a way in which you don’t need to read the whole available body of data into memory at the same time, to give consistent memory usage (similar to Conduit in Haskell)
Also, I think the example should be able to be flattened. Observable.Using produces an Observable<T> which you should be able to use to flatmap into your other observables. The resource you’re using lasts for the lifespan of the observable, so you can definitely chain other operations that utilize the data it produces. (see:
http://www.introtorx.com/Content/v1.0.10621.0/11_AdvancedErrorHandling.html#Using)
I generally like to avoid nesting in Rx, and try to keep it as straight a chain of operations as possible.