...and how do you ensure that the unit tests are correct? Another layer of automated tests? Accept you will make mistakes, but code in a way that makes finding and fixing them easy.
The first way is to make the test logic self-evident so its easy to audit. Another approach is to use something like Ruby's Heckle tool which mutates code. If the code can be modified and the tests still pass, then the tests are incomplete or incorrect. Perhaps other languages/platforms have something similar.
...I'd like to see the unit test that checks things look ok Internet Explorer
While testing aesthetics is pretty much impossible, Selenium can test the functionality in multiple browsers.
or that the system generally does what the client pays for...
If you haven't reduced the client's requests to a useable specification you can write tests from, then that's your fault. Computers can't do your job for you.