These lists mostly focus on how NPCs are implemented, so the focus so far is heavily on coding rather than literary aspects; I may add some other types of lists later, but for now:
Obedient NPCs: NPCs who will take commands from the player and interact with the game world on the player’s behalf. The Frenetic Five series does a fair amount with this, with a whole set of characters who obey the player’s orders.
Reactive NPCs. NPCs don’t talk to the player (or not much, or not solely), but they do react to the player’s actions — not just those directed at them, but other things that he does in their presence. For instance, A Day for Fresh Sushi.
Scripted NPCs. NPCs do their own thing, according to the author’s pre-programming. They may have a significant effect on the plot, move items around, and otherwise interact with the state of the world model, but these interactions are basically preplanned and do not significantly vary from one play-through to the next. She’s Got a Thing for a Spring and Deadline are classic examples.
Active-Agent NPCs. NPCs do their own thing, and are able to react to changes in the environment and unpredicted events. The mildest form of this is NPCs who freely and semi-randomly wander the game map; more advanced ones may, for instance, recognize and take items that they have reason to want or do other forms of goal-seeking. For detailed discussion of some of the issues involved here, see the rec.arts.int-fiction thread AI in IF; and see the Versu project.
Conversational NPCs. Characters have extensive implemented conversation to explore. Even in parser games, dialogue sometimes falls back on menus; in other places, it uses an ASK/TELL convention (as in ASK PETE ABOUT LETTIE), or a prompted ask convention in which the game suggests possible topics but is capable of understanding various typed input.