This does not answer the question as to why this happens, but it will help understand a bit about what your situation is.
Generally, I start
geth in the Terminal (I use OSX) and watch the activity. Firstly it tells me what the last block was that I downloaded - which I then look up on any of the block explorers. This tells me how far behind I am.
The next thing I watch for is the frequency of the downloaded blocks. Normally this isn't fast - I mean it's not a super fast stream of information filling up the screen, just a simple line of information every couple of seconds or so.
When I am caught up I then start Mist and it loads pretty fast then.
It's important to note that deplying anything through mist requires the blockchain to be up to date for it to be responsive. If not, then even sending transactions is going to "appear" slow.