Smart contracts are a solution for electronic and automatic contracts and were first proposed by Nick Szabo back in 1997. Bitcoin has a simple scripting language that supports multi-signatures and time locks etc., but Ethereum was the project that took it to a whole new level.
In short, it is about creating contracts that do not require trust in any party, which are automatically triggered when certain conditions are met. The conditions are embedded in the contract, and the proof that it is fulfilled usually lies on the blockchain. For example, if $10 is deposited in the following account, send 50% to person X and 50% to person Y.
You can also use so-called oracles, which are decentralized sources of knowledge. They act much like an API that can tell you about things that are outside the blockchain. For example, if the trains arrive late in 5% of all departures, send 100 Ethereum to the following addresses ...
However, an oracle requires the trust of those who own and manage it. To some extent, it removes the value of the contract being self-driving and not requiring trust. Even if the oracle integrates towards a decentralized solution, an oracle itself is centralized.
A smart contract can usually never be edited and changed afterwards. Something that requires the developer to be very precise and specific when he sends it out to the blockchain. Some criticism has been leveled because of this, but it is also what makes it possible to trust a contract. The author of the contract cannot terminate it.
It provides opportunities that have not existed before, and it contributes greatly to an Internet that is free from censorship. It also provides the ability to decentralized applications (DApps).