Michelle..
It does seem that up to now NPCs are being treated as people, they are scripted objects!
I am still trying to find out how detected type is arrived at for the touch events. It currently returns AGENT (1) since that is the only possible source of touches (until now). This is probably quite changeable, I can think of no reason why any script to date would check it since it cannot be anything else.
In other events however eg collision returning a new value would probably break existing content that is expecting 1 for an agent and anything else to be an object so I would be very wary of changing those.
I have come up with a few other suggestions though in addition:-
1. Allow osIsNpc(key) without error even if OSSL is turned off, it. (an easy change)
2. Add to llGetEnv(string name) something like "npcs_allowed" to return a boolean. This would allow a script to detect the possibility of NPCs in a region so that the script could just refuse to function when NPCs may be around. (another easy change)
3. Add to llGetObjectDetails options to determine if an avatar is an NPC and the creating scripts owner key. The boolean is easy but the creator details are not recorded anywhere currently.
4. Probably many more
General possibilities to bring them more in to line with objects
1. Add to the profile a note that it is an NPC and who the owner of the creating script is. similar to 3 above, That it is an NPC is probably easy, the creator as in 3 above.
2. Currently eject at parcel and estate level does nothing, I think this should probably remove (delete) an NPC and at minimum (but oddly more work to do) send them back to their rez point in the sim. I favour delete. Delete is likely relatively easy
3. Create should only do so if you would be able to rez a prim on that spot
4. Probably many more

What does anybody think?