The synchronization employed here is a "context switch via message queue". Said message queue is one large lock. I've seen code attempt to do automatic synchronization in this fashion, and it frequently results in deadlock.
I've got no clue how (or if) Silverlight does automatic synchronization. As someone who knows a lot about multi-threading, though, I can tell you that automatic synchronization is terrible for performance and can often lead to hard to discover dead locks.
That statement is relevant beyond the UI synchronization we're talking about here.