問題が散逸してるように思える。
インターフェイスではなくて、関数を渡すといっても、そのシグニチャは結局どこかで定義することになるし。
これが勘違いなのかな。delegate宣言せずにいきなりAction<string> callbackみたいに受けるんだろうか。
これはこれでめちゃくちゃ密結合な気がするんだが。
単独アセンブリとか、単独ソリューションだから成立するような気がする。

モックフレームワークは確かに難解だけど、まずモックオブジェクト自作して困ってからでいいと思うし、そもそも必要になるのは、それこそラムダで部分的に処理を突っ込むのと同じの、依存性の注入を行うからだと思う。

特別扱いしてるインターフェイスはフェアではないと言うが、インターフェイスだから特別扱いできるんだろうし。
拡張メソッド生やすのも簡単だし、Linqなんか器用にやってると思うんだけどな。