JavaScript class for a GameRoom
You're not using pseudo-private properties by way of trapping vars inside the constructor. Thus, there is no incentive to putting the methods on the constructor. It only increases your memory usage because the functions are created per instance and not shared across instances. Suggesting you move them out to the prototype instead.

function PublicGame(){...}
GameRoom.prototype.playerExits = function(){...};
GameRoom.prototype.playerDisconnects = function(){...};
// and so on




this.killGame = function() {
    delete Games[this._id];
};


Make sure you actually destroy the game properly, and not just remove its reference from the Games object. Make sure no handlers are referenced, no sockets running etc. Otherwise, the GC will never pick them up.



function PublicGame (players) {

  this.players = players;

  this.playerExits = function(playerToRemove) {

    this.players.splice(this.players.indexOf(playerToRemove),1);


In JS, we usually assume stuff because of the lack of type information and rely on the engine throwing an error when something is executed with the wrong data. 

However, in this case, you're assuming players is an array but never check if it really is during instance creation. The problem will come in later when you start doing array operations. In this case, splice will throw, but only later when a player exits. Then you scratch heads, lose hair and learn that your game has been running with broken data.

Guard players. Make sure it's an array and throw early before your code starts to churn with potentially broken data.



this.selectJudges = function() {
    this.judge = this.players.pop();
    this.players = this.players.unshift(this.judge);
};


You don't really need to pop off the last player to be the judge. Just put the judge in the beginning of the array to begin with and just pick him out using:

this.judge = this.players[0];




this._id = id_counter++;


Wondering if a counter would be a good game ID. What if you start to persist games across app restarts? Or run multiple instances of the game in parallel? They'll all start with 0 and numbers will collide. I suggest you use something like a GUID. They're usually unique and chances of collision are rare. Here's one from StackOverflow.