Multiple level shortcodes

Try passing the content of each shortcode through apply_filters( 'the_content', $content ); – you may not be getting your shortcode output because it’s never being called in the first place (beyond the top level). the_content filter include do_shortcode() (from memory), which is what you need. See how it goes…