As someone who does a huge amount of teaching, I'm not sure I share the concerns about the teachability of Observe.
Indeed, I think the zeroth order teaching concern is getting people to understand that (in my opinion) Contracts as a whole are a tool to be used judiciously.
If you're thinking of using Contracts without ever having thought propeply about whether your functions have wide or narrow contracts (plenty never have, in my experience) don't start rolling it out across your code base.
If you have given this thought before, or start thinking about it, then work out where contracts are appropriate.
Treat Observe as an expert-level feature. Only consider using it when you have some confidence that you know what you're doing.
In a different, but related thread, Louis gave a great example of how to use Observe effectively when you have the expertise to do so.
O.