Is it theoretically possible to limit the hash rate? I am thinking of developing an altcoin that is truly asic/pool proof. I haven't tried yet (or even downloaded the source code), but I was wondering if it is possible for the network to behave in such a way that it will not accept a block found by a peer if the hash rate of that peer is above a certain threshold. 

Would that be possible? If not, how could one achieve it?
Given the current proof-of-work paradigm, no. What do I mean by this? A coin which is mined by computing the hash* of data depending on both the previous block (so that the integrity of the blockchain is preserved) and the payload of the current block (so that the integrity of each individual block is preserved) as well as a nonce, such that the hash satisfies certain criteria (typically, being smaller than a certain value determined by the difficulty). In such a case, there is no way of telling whether a hash was found after trying trillions of times or just one lucky guess.

That said, I wouldn't rule it out entirely. But it will be very hard. In fact, I can relax some of the assumptions I just made and it would still not be possible to discriminate based on hashrate. To be able to discriminate effectively, you must have some way of preventing someone with a large hashrate from pretending like they are multiple people with small hashrates.

*Technically, any collision-resistant function mapping to a sequence of n bits will apply. I believe Primecoin's PoW is also applicable.