Dang, it sounds like you remade over half the features from scratch. You guys are hardcore!
Well, we'd already made all those from scratch in SlimDX, which is just a C# DirectX wrapper. So when we wanted to move our custom engine to be cross-platform (which DX and .NET are not), we looked around and chose Unity. It took a solid couple of months to graft our engine on top of theirs, but I don't really like most of their actual engine. Their core framework, though, is brilliant. And some specific features, like the shader stuff, are also brilliant.
As an aside, I bumped into issues with GUI myself. I ended up having to write my own custom GUI script that could produce buttons that played sound when clicked on. You'd think that would be in there already.
Our issues are more along the lines of multiple windows overlapping, or textboxes going nuts when you have more than one that isn't contained in a window. And it's not very heap-static, which puts more pressure on the GC than we like, etc. Our GUI had previously been done in GDI+, which is a lot more functional but slow and not possible to do true fullscreen with with a .NET underlayer. So there was another month or two of time (at least) into making a robust GUI framework that uses unity's framework under it but avoids most of their bugs. We're thinking of just stripping out their stuff entirely for the GUI bits, though, and using some bits of EZ GUI to roll our own thing under our existing layer. But now isn't the time yet, because we just don't have the time yet.
And, yeah -- Keith and I were both business programmers for a decade in my case, half decade at least in his case, before doing games professionally; we approach things from a different standpoint than most game developers, I think.