Reuse is not the primary goal of creating libraries for your application, (though it helps to pretend it is): separation is.
A little known fact is that libraries and frameworks are in many ways easier than applications; the main hard part is getting the boundaries and abstractions right. Everything else is easier. In particular, you can do TDD more easily!
Getting traction with TDD in production code is hard and this I found helps a lot.
2/2