Intuition for Simplicity's CheckSigHashAll
Your understanding of the commitment root is correct.  Taking advantage of Haskell's laziness, feel free to put undefined into the signature when computing the commitment root.

At the moment, the witness root is not used in the protocol.  There are some ideas on how to use it in more sophisticated protocols, but those ideas haven't been realized yet.  However, the witness root has some uses in testing and development regardless.

Simplicity doesn't use BIP-Schnorr per se.  Rather checkSigHashAll is a Simplicity expression that implements an old draft of BIP-Schnorr.  If you want a signature scheme that supports key recovery, you could implement such a scheme in Simplicity.

Neither the commitment nor witness roots contain any transaction data, mock or otherwise.  Instead the checkSigHashAll Simplicity expression contains primitives that, during Simplicity execution, return the transaction's locktime and version

To make a simple 2-of-2 multisig you could write something along the lines of 

 pkwCheckSigHashAll &lt;pubkeyA&gt; &lt;sigA&gt; &amp;&amp;&amp;
 pkwCheckSigHashAll &lt;pubkeyB&gt; &lt;sigB&gt; &gt;&gt;&gt;
unit


Since both branches are used in a 2-of-2 multisig, there are no MAST branches.

To make a 1-of-2 multisig you have some options.  One way is

 witness &lt;value of type (Bit, Sig)&gt; &gt;&gt;&gt;
 cond (scribe &lt;pubkeyA&gt; &amp;&amp;&amp; iden) (scribe &lt;pubkeyB&gt; &amp;&amp;&amp; iden) &gt;&gt;&gt;
 checkSigHashAll


However, even after pruning (turning the case within the cond into an assert), the program appear a lot like a 1-of-2 multisig.

Another implementation could be

witness &lt;value of type Bit&gt; &amp;&amp;&amp; unit &gt;&gt;&gt;
cond (pkwCheckSigHashAll &lt;pubkeyA&gt; &lt;sigA&gt;)
     (pkwCheckSigHashAll &lt;pubkeyB&gt; &lt;sigB&gt;)


In this case after pruning it looks like a 1-sig-or-something else.  Pruning transforms the above expression into something like

witness &lt;0&gt; &amp;&amp;&amp; unit &gt;&gt;&gt;
assertl (drop (pkwCheckSigHashAll &lt;pubkeyB&gt; &lt;sigB&gt;))
        (commitmentRoot (drop (pkwCheckSigHashAll &lt;pubkeyA&gt; &lt;sigA&gt;)))


where only the commitment root of the untaken branch is revealed.

Be aware that as of the time of writing this, pruning has not been implemented, nor is it the case that pruned expressions are yet enforced by the implementation.  You can still prune expressions by hand though.