надеюсь, не криво
Ну так это проверить не сложно. Для этого нужно обязать alert показывать не лозунги, а результат действа:
if(arrayCheck(e, itemsList)) {
    itemsList.splice(e, 1);
    alert(itemsList.length);
} else {
    itemsList.push(e);
    alert(itemsList.length);
}
Пощелкаем по объектам в этом случае, и что наблюдаем? Чтобы понять "почему", нужно вспомнить, что метод splice() первым аргументом принимает индекс первого удаляемого/замещаемого элемента массива, а вы передаете в него объект.
Функция проверки наличия объекта в массиве должна возвращать не просто его наличие в массиве, но и индекс его в нем:
function arrayCheck(value, array) {
    for(var i = 0, k = array.length; i < k; i++) if(array[i] == value) return i;
    return -1;
}
А код добавить/удалить должен быть таким:
if(e.className == 'item') {
    if((i = arrayCheck(e, itemsList)) > -1) {
        itemsList.splice(i, 1);
        alert(itemsList.length);
    } else {
        itemsList.push(e);
        alert(itemsList.length);
    }
    break;
}