Смотри, когда ты перебираешь массив, то вот тут:
arr.forEach(item => {
        outTitle += item.title
        outBody += item.body
    })
Ты не разбиваешь никак массив на карточки, ты пихаешь всё в данные одной карточку по факту, к тому же уже выбранную через card-title, а потом заново отображаешь её, перезаписывая весь HTML в карточке
Чтобы быстро поправить ситуацию, ты сейчас можешь сделать следующее:
Вынеси HTML, отвечающий за карточку, в функцию, ну например cardHTML: 
function cardHTML(title, card) {
return ` <div class="card__item">
                <div class="card__header">
                    <p class="title">${title}</p>
                    <div class="header__buttons">
                        <button class="action__button done"><img src="./img/done.svg" alt=""></button>
                        <button class="action__button delete"><img src="./img/delete.svg" alt=""></button>
                    </div>
                </div>
                <div class="card__body">
                    <p class="body__text">${body}</p>
                </div>
            </div>`
}
Это позволит тебе вынести код, собственно формирующий отдельную карточку, удобно в одно место.
А потом по нажатию - не пробегайся по всему массиву туду через forEach, а просто сгенерируй карточку и добавь код в  
<div class="cards">  через .innerHTML += cardHTML(тут аргументы укажи). Считай это будет как array.push(), только для DOM.
Дальше ты столкнёшься с тем, как тебе с карточками работать дальше. Можешь добавить в этой функции, возвращающей HTML-представление, просто 
data-id к 
<div class="card__item" data-id="${id}">, ну и разумеется в параметрах функции надо предусмотреть какой-то id. Потом можно получить из карточки это через dataset: 
https://developer.mozilla.org/en-US/docs/Web/API/H...
Нежелательно для этого id использовать, например, индекс из самого массива - ты будешь удалять например задачи из массива, а имеющиеся карточки будут ссылаться своими id-шниками на "ужатый" массив. Лучше находи самый большой id в массиве (наверняка будет просто id последнего элемента) и присваивай. 
Тогда точно не ошибёшься при поиске элемента в массиве на удаление.
Потом когда сделаешь сохранение данных в localStorage браузера (простейшая вещь), а не просто в текущую память, с помощью такой функции создания HTML тебе будет легко написать функцию первичного заполнения карточек - просто пробежишься так же по массиву и вызовешь функцию cardHTML.