The first thing you did wrong was you wrote a custom control as
Java code.
If at all possible, do your custom controls using XML, instead:
1) It's usually simpler
2) You're less likely to have to tear it up and rewrite it when a new
JSF version comes out. JSF1 and JSF2 had some significant differences internally and it required overhauling binary tags.
Sometimes you need something that absolutely cannot be done in XML and you have no choice, though.
Truthfully, I haven't done one of these recently. But I believe that the parent tag is responsible to invoking the rendering processors of its children. I'm also not sure that you are using the correct mechanism to write your generated output, but I'd have to go back and look.
Also, one of the things that JSF2 did that JSF1 did not was provide a standard way for custom tags to throw renderings to the top or bottom of the generated HTML. For example, you could tag generated JavaScript to be bound to the h:head tag's renderer so that SCRIPT elements would render within the HTML HEAD element. This is especially useful when rendering custom CSS styles or link-including style and script libraries.