I'll here give another reason (perhaps the most important one) why implementing filters by manually changing frequency bins is usually a bad idea.
Note first that time domain convolution (simple FIR filter design) can also be implemented in the frequency domain and this procedure is known as FFT convolution ( despite its name the math operation here is multiplication and not convolution). The two techniques are equivalent but the latter is much trickier to implement correctly (although it's much faster than its time domain counterpart)
On the other hand, manually changing frequency bins (either by removing them entirely or just by reducing their amplitude), means that you're discarding the original phase information, which in turn, can lead (and usually does) to inaccurate reconstruction of the modified time domain signal. Multiplying in the frequency domain does correspond to time domain convolution but, unlike true FFT convolution, we don't have a real filter kernel here so the results are less predictible.
Mathematically, perfect reconstruction is possible only when both original magnitude and phase information is retained. But since you're modifying both magnitude and phase, it's quite possible that there is no real signal (in time domain) that corresponds to your modified FFT data (at least not without significant digital artifacts being added to the reconstructed signal). That said, there are ways (e.g iterative procedures such as the Griffin-Lim algorithm ) that can be used to remedy this situation.