I want to clarify a bit what I've been thinking and doing for this.
My intention was to improve mock in order to support different kind of extensions with minimum impact on the core. Many of you have different thought on what a nice api and behavior would be for sequences. Some only regarding successive returns of a methods, others about interaction of many mocks.
What I tried was to add a .When(Func<bool>) at the beginning, before the setup. This condition rules when the following expectation applies. This had some impact with the default override behavior, but backward compatibility is maintained.
Using that simple, but powerfull extension some of the scenarios you wanted were implemented. They are not at trunk yet. Some pending discussion are pending.
If you want a preview of the current supported samples in branch /branches/private/bcardiff/ConditionalSetups/ browse the follwing samples
Also, there are some pending issues that will imply some code, but I think the main work is already done.
* Show where in the sequence the trace stoped. To improve error reporting. Similar to .VerifyAll()
* Support all overloads Func<...>, Action<...>
* Support properties, not only methods.