I'm working on it! but I don't know php so it's going to take a while :-)
heres my thoughts, hopefully some of it makes sense:
It would mean amending how <?php wp_list_cats(); ?> works...
Each category is allocated an ID, with category parent as 0
each sub category has a category parent ID other than 0.
By utilising this information it should be possible to allocate/autogenerate an id, or a class, to a category li tag. Preferably related to the current ID, so using the ID number might be useful.
In the main stylesheet, or an autogenerated additional sheet, you a add ul.children { display:none;}
which will hide all sub categories.
In the template you add some css to the header:
#ID.children{display:block}
where ID is also autogenerated and relates to the current viewed category ID or category_parent
so if you were looking at a category entitled 'About' with an ID of 10 which had a sub category entitled 'Access' with an ID 11. The generated markup would look like this:
<li id="categories">Categories:
<li class="one">Main
<li class="ten">About
<ul class='children'>
Accessible
the main style would have:
one.children, ten.children{display:none;}
the inserted css generated on the template would have the following, when viewing the relevant page:
ten.children{display:block;}
Is that as clear as mud? I'm hoping it isn't and that conveys my thoughts on this.