Olá, Daniel!
Primeiramente, excelente pergunta. Esse tipo de curiosidade e questionamento é muito importante na vida de dev :)
Agora, vamos lá.
Na função criarElementoTarefa, a variável tarefa é acessível dentro do event handler (manipulador de evento) li.onclick devido ao escopo em que foi definida.
Quando a gente cria a função criarElementoTarefa, a tarefa é passada como um argumento para esta função. Isso significa que tarefa está disponível em todo o corpo da função criarElementoTarefa, incluindo quaisquer funções internas definidas dentro dela, como é o caso com a função anônima usada em li.onclick.
O JavaScript utiliza um conceito chamado escopo léxico. Isso significa que funções internas têm acesso às variáveis definidas nos escopos exteriores ao dela.
É por isso que a função anônima dentro de li.onclick tem acesso à variável tarefa, porque tarefa é parte do escopo em que a função anônima foi criada.
Isso é bacana porque permite que a função que manipula o evento onclick interaja com os dados da tarefa específica associada ao elemento li que foi clicado, mesmo sem passar tarefa explicitamente para ela. Quando o evento onclick é acionado, a função pode utilizar tarefa para executar a lógica necessária, como atualizar a descrição da tarefa ou alterar seu status de seleção.
Isso faz com que o código mantenha uma ligação entre a ação de clique e a instância específica da tarefa sendo manipulada naquele momento, sem a necessidade de passar tarefa como um argumento para a função onclick ou usar variáveis globais.
Era essa sua dúvida? :)
Qualquer coisa me chama de novo!
Abração.