Checking if a checker can move
Well, to start with, there is 99% the same code, repeated twice. This is a very bad code smell. You need to turn the repeated code part into a function, like

function checkLiberties (color, otherColor) {
    if (liberties[x + 1][y] == 'clear') {
        liberties[x + 1][y] = color;
    } else if (liberties[x + 1][y] == otherColor) {
        liberties[x + 1][y] = 'both';
    }

    if (liberties[x - 1][y] == 'clear') {
        liberties[x - 1][y] = color;
    } else if (liberties[x - 1][y] == otherColor) {
        liberties[x - 1][y] = 'both';
    }

    if (liberties[x][y + 1] == 'clear') {
        liberties[x][y + 1] = color;
    } else if (liberties[x][y + 1] == otherColor) {
        liberties[x][y + 1] = 'both';
    }

    if (liberties[x][y - 1] == 'clear') {
        liberties[x][y - 1] = color;
    } else if (liberties[x][y - 1] == otherColor) {
        liberties[x][y - 1] = 'both';
    }   
}


and then just call it twice, as

checkLiberties("black", "white");
checkLiberties("white", "black");


After this step, you need to check the same thing inside the function. Where you can spot a pattern in the code, try to turn into a function. I am sure the four chunks inside can become one.