I love Hypothesis. I can't find many practical uses for it (it's more useful in more "algorithmic" code, rather than for interactive apps), but it's fantastic in what it does.
We're all still figuring out the details, but this sort of testing definitely works for testing your applications as well as your algorithms.
ETA: Oh, and thanks for the kind words. :-)
data Action = DoFoo | DoBar | DoSequence [Action] | DoParallel [Action]
We can then write an "run" function which executes these action, and use it in our properties.