Как правильно реализовать local storage в тудулисте в стиле ООП, чтобы удалять элементы?
1) Методы completedTask и uncompletedTask практически одинаковые. Объедините их и в объединенный метод передавайте аргумент.
2) const toDoParent = document.querySelector("#todo-block");
Часто у вас встречается. Нет никакого смысла так делать. Вынесите в конструктор
3) localStorage.setItem и localStorage.getItem нужно вынести в отдельную абстракции ввиде класса Storage с методами get и set.
4) Вам стоит выделить как минимум три сущности ToDoList - он будет вызывать ToDo и Storage
    ToDoList - создает новую задачу (new ToDo) и общается с хранилищем (Storage)
    ToDo - знает как только создать отдельную dom ноду в зависимости от переданных параметров и возвращает эту ноду, 
    Storage - работает с хранилищем, записывает в него или читает, в данном случае это localStorage, а может быть что-то другое. Например заходите писать в куки. Вы меняете реализацию методов set и get и приложение в лице ToDoList все также продолжит работать. Так как ему не важна реализация Storage, а важен лишь интерфейс к нему (get и set)
Разделите совой код на два класса:

class Task — содержит в себе статус, заголовок и всё что нужно для отрисовки самого себя
class TodoList — коллекция объектов Task — содержит в себе логику по созданию новых тасков их удалению и так далее.

И вот в таком случае в class TodoList можно легко добавить логику для синхронизации с локальным хранилищем.