Olá Bruno,
Encapsulamento consiste de um mecanismo para esconder informação sobre a sua classe e permitir o acesso parcial a ela, conforme a necessidade de outras classes que dependam dela. Isso é uma das medidas, e a mais importante, que aplicamos durante o desenvolvimento para evitar alto acoplamento entre classes.
Respondendo a sua pergunta, permitir o acesso direto aos atributos diretamente é ruim.
Imagine que você tenha a classe Pessoal com atributos públicos cpf e nome. Digamos que exista uma segunda classe Compra que utilize Pessoa e precise modificar o atributo cpf de acordo com novos dados que ela receba. Como cpf é público, Compra acessa cpf diretamente e o modifica como o esperado. Mas gostaríamos de começar a validar o cpf para evitar fraudes. Como, Compra acessa diretamente esse atributo, ela passa a ter a responsabilidade de também validá-lo e saber como deve ser feita tal validação. Agora imagine que existam mais duas classes acessando diretamente esse atributo. Elas também precisam conhecer toda essa lógica e se uma delas não validar corretamente todas as demais quebram sem você nem saber a fonte do problema.
Deu para ver que nesse exemplo tivemos tanto um problema de acoplamento quanto de coesão que seria evitado pelo simples encapsulamento.
Respondendo a parte final da sua pergunta, ter getters e setters para todos os atributos não é uma quebra clara de encapsulamento, mas é um forte indício. Pense sempre em encapsulamento, como esconder informações que não importam às demais classes. Talvez a sua classe de fato precise de getters e setters em todos os atributos, como é o caso do padrão de DAO (Data Access Object), mas tenha sempre o cuidado de avaliar a real necessidade de dar acesso às informações.
Respondi tudo?