So people can’t reverse engineer my work so easily…? 
Thanks for sharing that.
In OO programming we tend to encapsulate things in order to make them appear simpler from the outside. For example, a date picker widget just needs methods to show(), hide(), getDate(callback(Date date)), but internally it has all the details of how it is rendered, and what internal events it must process and so on; simple on the outside, complex on the inside.
Another example might by Arrays in Elm; outwardly they work like indexed arrays, inside they are actually pretty complex (https://github.com/elm-lang/core/blob/5.1.1/src/Native/Array.js#L1). The great thing is, in order to use Arrays, I don’t need to understand how they work, all I need is a simple mental model of an indexed look up.
Re-use of a piece of code is also a factor in this. If something is just being used in one project, it may not require the same level of thought going into its API, just wire it up and get your project done. Once something is being published as a package, you want to find a small, neat API that hides complexity behind it and provides a predictable mental model to work with.
Its different in functional programming to OO. I still think the same principals are at work, its just that they are expressed differently in FP code. As you are right to point out, in this case I think too much of an OO idea is being squeezed into an FP paradigm, causing an escalation in complexity that negates the original intention of trying to do it.
I hope I am not creating unwanted noise or distraction with my explorations - at the moment I am trying to explore lots of different ideas with Elm, and am also prepared to try out ideas and to be honest about the ones that are dead ends. Like this one.
Yeah, KISS - Keep It Simple Stupid.