1) В одном предложении, стейт, как и в переводе - это внутреннее состояние компонента. Например, у вас есть компонент лампочка. Вы можете в его состоянии хранить свойство включена/выключена.
Да, вы можете это состояние передавать лампочке как prop, но это означает, что вы будете хранить состояние где-то выше(если вы хотите, чтобы включение/выключение можно было совершить не правя код, через интерфейс).
В различных ситуациях может понадобиться оба подхода.
2) Стейт есть не всегда. Он и не всегда нужен. Когда он не нужен компонент можно написать просто как функцию. Когда он нужен, можно использовать
хуки, и можно(но уже во многих случаях необязательно/нежелательно) использовать
классы.