I think the difference is quite subtle, in the case of Reactive to get the output you actually need to create a new Signal (this is hidden by the foreach), while in Observables any Observable can call any number of functions without creating a new Observable.
To expand a bit on your question, for me the main difference is simplicity: every Observable basically stores a list of functions to call upon change, and these are just called synchronously without intervention of the task system.