I know my response is coming quite late to this thread, but I thought I'd chip in with some example code and a response to the above concern.
Types can indeed get "complex" -- complex to read, complex to write, complex to map to other subsystems sometimes, etc. However, consider the alternative approach: for a given problem solution, simpler types invariably always results in more complex code or vice versa.
Consider a GUI library that I want to write and finish some day, which I call ROSE. As GUI libraries go, this is by far the most "Rusty" code I've experienced anywhere. Event processing is entirely unique as far as I can tell, and made possible thanks to some of Rust's types. The readme.md file will kind of set the stage for why I started writing it, but take a look in the apps directory for some example code.
Of note, there is a distinct lack of any Rc, Arc, RefCell, etc. types. There is a single Box'ed type representing the currently running application; however, that was borne out of frustration and in some sense laziness on my part.
Note that the goal for this code was not the elimination of these kinds of data types; rather I wanted code that maximized the compiler's ability to detect program errors. Rc<RefCell> relies in part on run-time checking, which I didn't feel I wanted at the time. So that dictated how I built the code, the event handling logic, everything. Note how different it is to, say, a Qt app, or a Gtk application.
It's great for simple applications; however, as I build more complex programs with it, the code can get pretty hard to follow. The GUI state of your application ends up sitting in a single structure, there is a very sharp distinction between drawing a widget and responding to input events from it, etc.
From a certain point of view, this is simpler code. But from others, it's vastly more complicated. I personally like it. But I suspect others who review it will follow up with just how horrible my code really is.
So, remember, some things are just inherently complex, and the type signature might reflect that. It's OK. Because if you bend over backwards to avoid those complexities, you might end up with a program that is hard to maintain in ways you didn't anticipate at first. Complexity shifts around, like an air bubble in a blister pack. 
Hope this helps you out in some way.