This is really 2 separate questions. Starting from the last, you ask why some treatments work to prevent attacks (prophylactic) and others to treat acute attacks (on-demand). This is really a matter of timing. If you could absolutely predict when an attack would occur, than all of the new HAE medicines would work as prophylactic treatment. However, since we cannot predict exactly when attacks will occur, the prophylactic medicines (such as C1 inhibitor) must be able to stay in the body long enough to provide continuous or near-continuous prevention. The medicines that are not used for prophylaxis (icatibant and ecallantide) do not stay in the body long enough to work in this way.
Now the first question is more difficult to answer and needs to be addressed on two levels. The first or highest level answer is that icatibant only works to prevent bradykinin from binding to its receptor. Therefore, the angioedema must be caused by bradykinin. While we know that HAE due to C1 inhibitor deficiency causes angioedema due to bradykinin, the cause of HAE with normal C1 inhibitor is not yet known. In fact, what we call HAE with normal C1 inhibitor may be a collection of different diseases some of which may be due to bradykinin but others not due to bradykinin. On the second level, there can be many reasons why icatibant does not work for all bradykinin mediated attacks of angioedema. For instance, it can be given too late in the attack. In addition, we suspect that there are genetic differences between people that determine how well a specific drug may work in them. This is an area that requires further research.