I've been working on/with spreadsheet users (and some hardcore spreadsheet financial models) for the past 1.5 years - and I like to think about spreadsheets as a reactive, visual (and 2d!), _functional_ programming language. Except if you use circular references, in which case it's no longer functional (b/c you can use use circular references to store internal state!).
If you're interested, I've spent the past 6 months working on Mito -- https://trymito.io/launch1 -- - it's a spreadsheet that sits inside a Python data analytics workflow, and generates Python for you while you edit. Our approach to spreadsheet programming is a little bit more on the nose :)