Each instance of segment creates a different batchNode from every other segment, and similarly every instance of subSegment creates a different batchNode from every other subsegment. Thus, you are not batching at all, explaining the large number of draw calls.
Maybe it is possible for you to initialize the batchnode outside of these two classes, and pass it along to the ctor's for both segment and subSegment. I would also seed the spriteframe cache only once with the .plist (as long as you do not remove spriteframes along the way).