First, do you want multiple sounds to be able to be played at the same time? If not, I would:
Create a function like "function playClip( whatClip ):void{}" that you can use to play each clip. When a user hits a button, you would call "playClip("clipName");" where "clipName" is the name of the sound that you want to play.
Inside the function, set the volume of the background music to 25%, which I believe is a static value, not a cumulative. Meaning, if the background volume level is already 25%, I don't think it will reduce it to 25% of that if called again. I think it will just remain at 25% of it's original volume. Then set your sound to the whatClip variable and play it, which will STOP any currently playing clip and play the new one. Then set the eventListener I linked to before, listening for your clip to stop.
Create the function to return the volume up (and you
should also remove the listener at that point).
If you DO want multiple clips to play, it gets a bit trickier. You can accomplish it several different ways. What I would probably do is:
Create a boolean variable for each clip at the beginning of your code like "clip1:Boolean = false;". When a clip1 starts playing, set "clip1 = true;". When it stops, call a function like "clip1Stop". Inside of clip1Stop, set "clip1 = false;" and then call "volumeUp();". Inside the volumeUP function have an if statement like:
"if (clip1 == false && clip2 == false && clip3 == false && clip 4 == false etc){ volume = 100; }".
Of course, that is pseudo-code, but hopefully you get the idea. That way if two clips are playing, they are both set to true. If clip1 finishes while clip2 is still playing, it gets set to false and makes it to the if statement inside of volumeUp. However, clip2 is still set to true, so the volume won't go back up until clip2 is set to false (the next time the volumeUp function will run) assuming no others have been played.
The only thing that stinks is that you have to create a stop function for EACH clip (clip1stop, clip2stop, clip3stop). All the function is there for is setting that clip to false and then calling volumeUp. This is a "limitation" of AS3's event call. It would be awesome to call "Event.STOP, stopClip('clip1')" but it's not possible from my recollection.
-Sam