A resposta mais simples é que, se você colocar tudo em uma classe, terá que se preocupar com tudo de uma vez quando estiver escrevendo um novo código. Isso pode funcionar para pequenos projetos, mas para grandes aplicações (estamos falando de centenas de milhares de linhas), isso rapidamente se torna quase impossível.
Para resolver esse problema, você divide partes da funcionalidade em suas próprias classes e encapsula toda a lógica. Então, quando você quer trabalhar na aula, não precisa pensar no que mais está acontecendo no código. Você pode se concentrar apenas nesse pequeno pedaço de código. Isso é inestimável para trabalhar de forma eficiente, no entanto, é difícil apreciar sem trabalhar em aplicativos enormes.
Claro que há inúmeros outros benefícios em dividir seu código em partes menores: o código é mais sustentável, mais testável, mais reutilizável, etc., mas para mim o maior benefício é que ele torna os programas massivos mais fáceis de gerenciar, reduzindo a quantidade de código que você precisa pensar ao mesmo tempo.