Context sensitive components such as key signatures, which rely on other information such as the current clef, get this information by querying the staff. Most of the functionality of the editor is in the staff. The editor you see is mostly a visual wrapper to save cumbersome menu operations. The structure I picked is fairly simple to implement and traverse. For example, playback consists of iterating through a staff's submorphs and taking the right action for each one.
State information needs to be kept for keys and accidentals.
Such a simple system has a few drawbacks. With the addition of layers this can be alleviated. The hardest single problem I found was multi-note barring. Its still not finished. I've settled on using submorphs for a simple tree structure.