We're using custom components in every project. They are easy to maintain.
I've extended / "improved" the richfaces ExtDT for our needs by extending the java classes for the UI-Components and the belonging Renderers. It's not a trivial task since the quite complex structure of some of the richfaces components. (AbstractRenderers, Eventhandling, RowRendering, TagHandlers etc.)
Building simple Components from scratch is quite easy - on the other hand. Even adding child components, rerendering, a4j:supports and valueexpressions. But some there're still many things I don't understand and apparently nobody could help me with ;-)
I wrote a custom autocomplete component and found it pretty tricky. The thing that took a lot more work than expected was
wasn't full time on it and an autocomplete is pretty simple in comparison to an extendedDataTable, but it was a first attempt
by me at a custom component.
It's a useful skill to have though, if the component library doesn't do what you want there's not much else you can do other
than perhaps have a jQuery front end bolted onto a servlet.
In fact the jQuery/servlet option maybe worth investigating further, there are some good jQuery datatable solutions out
there such as http://datatables.net/.