Consider this scenario, where you need to build a complex application, and political issues says that you have to start from scratch. This means no access to any extrenal libraries (OSS or MS-Provided) ones.
Can you build a complex application that way?
The answer for me would be probably no. I know how I structure my applications today, and I am building them to use best practices approaches for maintainability and testability. There are a lot of tool support out there that I use in order to build my applications, not being able to use that would significantly cripple my ability to build applications.
I couldn't even write those frameworks from scratch, at least not in a reasonable time frame. A basic OR/M layer should take about a week to write, but it would be very basic, and wouldn't support any of the more powerful features that actually makes OR/M attractive (lazy loading & eager loading, for instance). A basic IoC takes two days to write, but it wouldn't allow interception and it wouldn't allow easy extensibility, and support for complex nested dependencies is going to be severly limited.
If you aren't working at that level, you may be able to roll out simple tools, and be successful, but I wouldn't be able to work within those limitation (I am often not able to work within the limitations of the current tools, at which point I extend them :-) ).
Anyway, just a point I wanted to make. Don't bother starting with a blank slate anymore, it is not worth it.