I don't believe you can't make AI for both large crowds and small NPC groups / individual NPCs that doesn't ~seem~ to be intelligent.
Regarding the example of NPCs attacking the player after they just saw him kill a high-ranking opponent, the logic for this has been solved almost a decade ago in games such as Warlords Battlecry and the original Assassin's Creed. In WBC, if you killed a difficult target, such as a dragon or daemon, nearby enemies had a percentage chance of being afflicted with the psych effect of fear or terror. In AC1, killing someone sent the nearby civilian crowd running away from you. If you want to make it more realistic, add logic to compare the difficulty of the opponent you slew to those of the nearby opponents who were in line of sight. Killing a level 5 opponent only sends NPCs with lower level difficulty running away from you.
As the number of NPCs increases, more and more they start acting as a crowd and less as individuals, and the AI per NPC can be simplified.
In scenarios with fewer NPCs, it's really just a matter of setting switches. It's just that the developer has to have the foresight to put switches for different scenarios such as having previously been attacked or wronged (e.g. you stole something from them) by the player. With many years of gaming now behind us, most scenarios are now known, even turned into memes. So any developer should put a minimum set of switches for their NPCs' AI.
Switches are permanent, or have longer longevity than current AI state. So an enemy guard, in a restricted area, who almost came close to making you out, would have logged these previous events and doesn't go back to the default state of 'unalarmed'. In the future, when he's in the process of making you out, he'll be more insistent, and even investigate more aggressively, even before the "suspicion bar" fills all the to red and he positively detected you.
So really, if there's any limitation it's a RAM limitation, but we have plenty of that in modern PCs.
Granted, putting a large number of NPCs on the screen at one time who act like individuals as opposed to a crowd would still be CPU-bound. Conversely, you can split the crowd into two crowds: a crowd of guards and a crowd of civilians.