It seems the first question can be accomplished with something like:
//after creating newtx and specifying input and outputs
newtx.Inputs[0].ScriptSig = privatekey.ScriptPubKey;
newtx.Sign(privatekey, false); //puts signature and pubkey in ScriptSig
//use those plus additional parameters in script
newtx.Inputs[0].ScriptSig = new Script(
newtx.Inputs[0].ScriptSig + " " +
//leave signature and pubkey as first parameters pushed onto stack
//then add additional parameter (type PubKey)
Op.GetPushOp(additionalParameter.ToBytes()) + " " +
//then add script whose hash was in original P2SH trans
Op.GetPushOp(scriptIn.ToBytes()));
The scriptIn is the same as the usual P2KH script preceded by a check for the hash of another parameter
scriptIn = new Script(
"OP_HASH160 "
+ Op.GetPushOp(additionalParameter.Hash.ToBytes())
+ " OP_EQUALVERIFY"
+ " OP_DUP"
+ " OP_HASH160 "
+ Op.GetPushOp(pubkeyhash.ToBytes())
+ " OP_EQUALVERIFY"
+ " OP_CHECKSIG"
);
But when the transaction is sent it gets the following error:
16: mandatory-script-verify-flag-failed (Signature must be zero for failed CHECK(MULTI)SIG operation)
Not sure why it's failing.