wp_list_categories();
will by default give you a hierarchically nested list of all your categories. Hiding and showing that list, or parts of it, is just a matter of CSS. That sounds like what you need. For example
echo '<ul class="my-cats-list">',wp_list_categories(),'</ul>';
// style rules; put in your theme's style.css
.cat-item {
padding-left:5px;
}
.children {
display:none;
}
.cat-item:hover>.children {
display:block;
}
That is very minimal but does work.