The big difference is that bitcoin's scripting language is not turing complete. This is a security and scalability trade off that the bitcoin community isn't willing to compromise on, which drove people like Vitalik (started as a bitcoin dev) away to start Ethereum.
I haven't looked into this much, but there are projects like Rootstock, https://www.rsk.co/, that essentially recreate all of Ethereum's functionality as a bitcoin sidechain.
It has always had, it is just much limited than ethereum's.
But you can express things like "if X and Y cooperate they can spend this transaction or Y can spend after 1000 blocks or X can spend if it reveals the preimage of this hash ____"
These logics are what LN uses in its update-transactions
I'm out of the loop, I didn't realize bitcoin had contracts yet. Cool.