You said you would send messages to users IN the chat room who did NOT JOIN the chat room: it seems a contraddiction. If a user doesn't join a room he isn't IN the room and so there's no way to send messages exchanged in the room also to this user.
Regarding room presence you don't need a plugin, but you can relay on a presence handler attached to Strophe.connection. Here is an example:
connection.addHandler(onPresence, null, "presence");
...
function onPresence(presence) {
var msg = $(presence);
if (msg.children('x[xmlns^="' + Strophe.NS.MUC + '"]').length > 0) {
// muc presence
onRoomPresence(presence);
} else {
// user presence
onUserPresence(presence);
}
return true;
}
However, there is also a Strophe plugin named MUC (see strophe.muc.js)