Yeah, you're right... I ran into that when trying to figure out how to code the game of Breakout, which needs the ball to bounce correctly off of vertical and horizontal surfaces. The only solution I could figure out was to have the ball "scout" ahead (quickly, invisible to the user), check if it was still touching the other surface, and then report back. I'd be interested to see if there's a simpler way, but this does seem to work. Here's the bounce concept, and here's a complete version of Breakout.
For horizontal surfaces you can set the direction to 180-direction.