Well an "immutable" data store is still mutable - when you add entries! So it comes back down to storing history or not, which is down to supporting elements of the system that are behind in the sequence of events and not yet caught up with subsequent changes. But after that, you don't need to store history, and if you do, then you must have a domain requirement to do so, in which case, make it explicit with a history table!
The question is, how do you get to each new state? AST and my squinty-eyed interpretation of tarpit FRP tell me that you have pure domain functions or derivative relations transforming from state to new or next state. I think Clojure's DB has something like that.
As for input vs derived state: well that's an arbitrary distinction, really. I mean, just have derived state as your general model, and then make some state special - inputs - and "derived from something going on elsewhere". Then outputs derive "state elsewhere" from system state. The tarpit called them feeders and observers.