You can keep manually updating the DOM every time you get data back from the server but if you don't mind I'll keep using frameworks like Angular that take care of those mundane details for me while giving me a sane way to help me organize and test my front-end application.
If you are doing something simple and quick by all means just use jQuery or plain JS - the advantage of the more powerful frameworks comes into play when building bigger things with complex scenarios happening. The challenge to make a quick front-end site is meaningless - the more meaningful challenge would be to write a complex real time application with both and compare, which of course we have already done.
The tools I use to keep my code maintainable are good practices, frequent refactoring, and clear thought. No library can replace those. Why do you need a 2 way binding to take care of showing and hiding elements? Only a 1-way binding is required. I am currently working on an app that uses Knockout and we are having horrible performances issues - all of these 2-way bindings are checking for everything all the time. There are fixes for this - fixes that would not be needed if we didn't build it with duplo.
Angular.js, OTOH... I looked at it a while back and did not like just how much it forces you into its way of doing stuff.