A little bit confusing regex for sed but workable
sed '
:a #mark return point
s/\(\(^\|)\)[^(]\+\);\s*\([^)]\+\((\|$\)\)/\1\
\3/ #remove ; between ) and (
ta #repeat if substitute success
s/[[:blank:];]\+$// #remove ; with spaces at end
'
Breif regex explanation:
* `^\|)` from the line start or `)`
* `[^(]\+` any symbols but `(`
* `;\s*` semicolon with possible space(s)
* `(\|$` up to the line end or `(`