If you want to add additional pitches into existing notes, use the stream.Stream.insertIntoNoteOrChord
method:
http://web.mit.edu/music21/doc/moduleReference/moduleStream.html#music21.stream.Stream.insertIntoNoteOrChord
For instance:
s = stream.Stream()
n = note.Note('C4') # qtr note default
s.append(n)
c = chord.Chord('E4 G4') # qtr
s.insertIntoNoteOrChord(0.0, c)
s.show('t')
{0.0} <music21.chord.Chord C4 E4 G4>
If you need to do something more complex, then I suggest just inserting all of the notes and chords to wherever you want them to be, and then running .chordify()
on the Stream to make everything work.
A third option is to use different stream.Voice()
objects for the different layers.