1) может быть от вложенности внутренних элементов друг в друга избавиться в DOM, а хранить дерево в JS? а в html разметке всё плоско
2) сохранить структуру, но обработчики кликов повесить на h2, таким образом поменять на:
$('.button h2')
$('.subcat h2')
$('.subcat2 h2')
и т.д.