The reason is because of spectral leakage. Your frequencies do not fall exactly on the FFT bins- this causes the energy to appear in nearby adjacent FFT bins as sidelobes. The most spectral leakage occurs when the frequency of a signal falls exactly between two FFT bins. Another way to think of it, is that the signal is not periodic w.r.t. the length of the FFT you are using.
Your two frequencies are appearing at two different positions with respect to the adjacent FFT bins - so they are suffering different amount of leakage. Thus, the peaks have different magnitudes. In the case where the frequencies have the same magnitude, they are located the same distance away from the closest FFT bin.
You can try adjusting your sampling rate and FFT size so that the resulting frequencies will fall exactly on an FFT bin. With the 3000 Hz sampling rate use a 3000 point FFT - corresponding to FFT bins every 1 Hz. With the 4000 Hz sampling rate use a 4000 point FFT - again, corresponding to FFT bins every 1 Hz.
In your 4000 Hz case, you are probably using a 4196 point FFT. The FFT bins are close to being every 1 Hz, so the frequencies at 900 Hz and 1100 Hz are almost exactly on a FFT bin and thus have almost equal amplitude.