This is a pretty easy solution
http://www.hiveworkshop.com/forums/jass-resources-412/snippet-ispathblocked-211198/
Look inside of the map for a quick cnp demo of IsPathBlocked. If you cnp that code and mod, ur map will insta work. You can mod it a bit to give refunds.
Use this lib to get unit costs for refunds
http://www.hiveworkshop.com/forums/jass-resources-412/system-costs-getunitcost-getitemcost-196894/
So essentially, if a player builds a tower that will somehow cause a block (any block), that tower will be instantly removed and the player will be refunded with a texttag warning.
I recommend using this for your text tags
http://www.hiveworkshop.com/forums/jass-resources-412/snippet-texttag-213488/
It displays local tags, which is awesome
edit
I also suggest ghosted visible units so that they will never clump. However, this will enable towers to be built on units, and those units will freeze or something if the towers are built on them (or attack, it's something crazy), so you should also check to make sure that there are no creeps at the tile where the tower is going to be built (if you wanna do the ghost visible option).
However, players will still be able to do juggling: have 2 exits and as units approach one, close it, then open it and close the other, etc. How do you stop juggling? Hmm...