Say, analog electronics mostly works in the pure functional domain. An amplifier does not try to change the input signal. Instead, it produces a more powerful output signal, following the shape of the input signal. A tone generator in a musical instrument does not try to make a key on the keyboard vibrate. Instead it produces a sound signal according to the key pressed (which note and what velocity).
The simplest way to try practical pure functional programming is to connect a few Unix processes via pipes:
cat somefile.py | egrep '^def \w+' | wc -l
The above is a pure function compositon, as a map-reduce pipeline, in point-free style. (Yay, buzzwords.) It counts top-level functions in a Python file.But how to achieve something like updating with that? By looping the output back to the input, and switching o the "next version" once it's computed. Conway's game of Life looks like an ultimate "update in place" thing. But it's purely functional, too: the new state of the map is completely computed based on the previous state if the map. Then the new map is seen as "the current map". Similarly, frames in a drawn animation do not change, but they are shown at the same place one after another, giving the impression of motion and change of "the same" picture.
In general, our Universe may be seen as a purely functional computation: its next state is a function of its past states, and the past is immutable.