First let me say that Icefaces is a pretty solid product and it's saved us a ton of development time in terms of getting a good, modern feeling web app without a lot of JavaScript knowledge on the team.
That said Icefaces does have it's warts. A lot of the cool features like partial submit cause lots of chatter back and forth between the client and the server. State is held on the server and reflected in the client which makes for a lot of back and forth traffic between the client and the server. In order to achieve optimal performance you're going to have to dig under the covers and use some JavaScript which is the very thing you were trying to avoid in the first place. Even validation needs to be done on the server side, however I believe this is a JSF limitation more than an Icefaces limitation.
I also don't appreciate how Icefaces changes component APIs between what seems to be minor releases. The whole tree component changed between 1.7.2 and 1.8. The tree component was ugly and limited so it was a welcome change but still. We felt like 1.8 was forced on us which leads me to my next point.
Icefaces treats it's non support contract paying users as second class citizens. Between Icefaces 1.7.2 and 1.7.2 SP1 there was a major regression in the push mechanism that caused it to fail completely in our app. The only fixes available were to move to 1.8(which had API changes) or use 1.7.2-SP2 which is only available to customers on a support contract. Don't forget for a minute that the purpose of IceFaces is to sell you support. The only fix for 1.7.1 was to patch the source for the release manually, not horrible, but I'd expect better.
That said I found IceFaces to be a useful product and much better than RichFaces, especially in terms of the quality of the documentation. However if I were starting now I'd also take a look at GWT if you want a real open source product or Flex if you want something very rich and thick client-esque. Event with all it's problems I'd still recommend Icefaces but it could definitely be better