Перетаскивание проще всего будет самому написать используя эвенты mouseover и drag-евенты,
смысл в том, что при mouseover на ячейке карты проверять, можно ли расположить корабль и как-то подкрашивать ячейки, которые будут заполнены. Чтобы не париться с поворотом - можно предложить сразу выбрать, вертикальный или горизонтальный корабль хочется воткнуть. Т.е. в контейнере с выбором кораблей сделать оба варианта для каждого размера.
Что касается хранилища. Тут надо подумать, какие данные нужно хранить. Это очевидно координаты всех кораблей, текущая игровая ситуация, состояние полей противника для каждого игрока. Как хранить - вроде всё более-менее очевидно. Для noSQL я бы взял mongoDB, просто как самый простой и известный вариант. Можно хоть всю игровую сессию сваливать в один документ, и не особо заморачиваться с этим.