Whilst everything you have said is right. Do not mess around with angles. You are already using vectors for your position, why not use them for the velocity and and acceleration too. At the moment you are essentially working with your velocities in polar coordinates. This is stupid. Every calculation you do involves converting to Cartesian coordinates and then back to polar at the end. Just work with vectors. Now I expect that the reason you aren't working with vectors already is that you don't know (enough) about them. http://www.wildbunny.co.uk/blog/vector-maths-a-primer-for-games-programmers/. I learnt all I know about vectors from there and currently studying Engineering (very maths heavy) at university I still have no problems with vectors.To give you an example, if your position vector is P0 at time 0, velocity vector V and assuming 0 acceleration then the position at time t, Pt is just:Pt = P0 + tVFrom that point onwards the maths is actually the same since Ptx = P0x + tVx and Pty = P0y + tVy until you get to the end where you start messing around with angles again. Angles are 99% of the time unnecessary and in fact if you do this with vectors then the move to 3d will be almost as simple as saying they are 3d vectors instead of 2d vectors.
At the time, it had gotten somewhat boring that the balls followed a relatively predictable trajectory, and I added some code that would slightly adjust their angle of travel every tick.