I've been playing for 21 years now, and still feel frustrated sometimes. The answer is always to practice precisely the thing that you can't do. So from what you've said above, work on ear training. There are numerous pieces of software and books available. I used a book called 'Ear Training for the contemporary guitarist' years ago, and that worked. A couple of my students have said a pc program called 'audacity' is good, but I can't vouch for it personally.
you'll also need to listen to small chunks of music and try to play them on your guitar by ear... it'll get easier the more you do it.
Structured practice is the key - how much time do you have / can you find? My practice goes a bit like this each day:
15 mins warmup - alt picking, legato exercises and sweeps to a metronome to get my hands going
30 minutes on technique - building picking speed, sweeping new shapes etc
30 minutes on scales / arpeggios
30 minutes on rhythm playing
30 minutes on 'head' exercise - theory, ear training etc
30 minutes 'fun' - jamming to backings / learning a tune
plus time recording whatever I'm recording at the time - variable depending on what else is going on...
The sections shift a bit sometimes depending on what I need to focus on - so at the moment as I'm about to take a diploma exam I'm using the 'technique' time for more theory and scales. And some days if I'm very busy I'll trim the slots down into a smaller chunk of time.
Just make sure you practice every day, and as long as you continue to push yourself you'll get there. 2 years isn't very long to have been playing, so don't get too down that you're not the next Jennifer Batten yet! :D
When you say you can take a piece of music and learn it overnight, give an example - you might be way better than you think you are... It's common to sell yourself short....