#Java 8, 148 bytes
Java 8, 148 bytes
s->{for(s=s.format(s.replaceAll("(\\d+)","%1\\$0$1d"),0);!s.matches("\\D+");s=s.replaceAll("0(\\D)","$1$1"));return s.replaceAll("((.)+)\\2","$1");} Gdamn Java regexes are so useless sometimes.. Last time it was lack of using the capture group "$1" for anything, now this.. I want to replace 3c with ccc or 000c with ccc as a one-liner, but unfortunately Java has no way of doing this without a loop. Ah well.
Explanation:
s->{ // Method with String as both parameter and return-type for(s=s.format(s.replaceAll("(\\d+)","%1\\$0$1d"),0); // Replace every numbers of that many zeroes // (i.e. "3>2+" -> "000>00+") !s.matches("\\D+"); // Loop as long as the String contains zeroes s=s.replaceAll("0(\\D)", // Replace every 0 followed by a non-0 character, "$1$1") // with two times this captured non-0 character ); // End of loop return s.replaceAll("((.)+)\\2","$1"); // Reduce every repeated character amount by 1, // and return this as result } // End of method