Can a transaction be created by 2 different wallets? I am familiar with Bitcoin's model, but a complete noob in real-world details. I am entertaining the idea of a service that receives transactions (A->B) and "wraps" or completes them to include (A->B &amp; B->C).

Is it possible to create a transaction requiring 2 wallets to participate?
For example, to create a transaction sending coins from Alice to Bob, and from Bob to Charlie?
I had in mind a process where Alice creates the first half-baked transaction (Alice -> Bob), send it to Bob, Bob "adds" its piece (Bob -> Charlie), and the result is a valid transaction.
Obviously, the (Alice -> Bob) part must not be reusable by anyone else.

Can that be achieved? How? What's a good starting point / alternatives?
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.