I came across a very interesting article about the abstractions in the steam controller libraries:
http://www.gamasutra.com/blogs/LarsDoucet/20170125/289904/The_Steam_Controller_Configurators_Untapped_Power.php
I think it would be interesting to see if we could incorporate some of the ideas.
I find this the cleanest abstraction I've ever seen in a control system. It also makes me happy because it seems to be a form of clean architecture, which I love: https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html