Not sure if it's directly applicable to Hypothesis, but one way to use QuickCheck for interactive code is to define a type representing actions to take, eg.
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.