If you look around, it's actually very hard to find a genuinely small language you can embed in your runtime, and offer to users. Lua is a common suggestion, but Lua doesn't let you lock down IO, or code loading (that is, without writing your own interpreter and changing semantics -- what's the point?). A truly pure smart contract language gives the containing app full control over the entire runtime.
Smart contracts to me are a modern stored-procedure language that you embed directly into your app, and give you a 100% deterministic way to store long-term state, including code. "Application DBs" like sqlite don't scratch this itch (for instance sqlite doesn't have SPs). Plus, smart contracts are metered (usually), which allows for a cost-model and prevents against DOS. This plus the turing-incomplete angle makes them reasonable to open up to the world.
Erlang and lambdas come to mind, and I can argue why they're different too. But this is already too long :)