Can a transaction be created by 2 different wallets?
Yes. There's a project called Lighthouse that does something very similar. Bitcoin transactions either completely succeed or completely fail. We can use this by starting with a transaction that has the outputs we want. 

--&gt; TX -- 0.5 BTC --&gt; Charlie


This is invalid, because it doesn't have any inputs.

We add Alice's input.

Alice --&gt; 0.25 BTC --+
                     +--&gt; TX -- 0.5 BTC --&gt; Charlie


This is invalid, because the transaction creates more in outputs than it takes in inputs. It can't be partially spent, either. It's all or nothing.

We add Bob's input.

Alice --&gt; 0.25 BTC --+
                     +--&gt; TX -- 0.5 BTC --&gt; Charlie
Bob   --&gt; 0.25 BTC --+


Now the transaction is valid, and can be pushed to the Bitcoin blockchain. Modifying it will require Alice and Bob to re-sign it. If we want Bob to have some Bitcoins at the end, the procedure is the same, except we start with outputs that pay both Charlie and Bob.