For project #2 -- may be worth taking a close look at
Om, a clojurescript interface to React: functional + immutable, taking advantage of ClojureScript persistent data structures, laid on top of React, retaining React's component model with path-based 2-way lenses into application state, and further speeding up React's diff computation.
May also be worth considering not just ideas from React, but whether actually interfacing to React like Om does has net benefit for Elm. Perhaps the compositional goals of Elm UIs could be encapsulated into components in React's shadow DOM.