Broadly, defunctionalization is transforming a program to eliminate higher-order functions. Rather than focus on its use for compilation (see this H Cejtin, S Jagannathan, S Weeks paper on MLTon) or analyses (see Firstify from N Mitchell and C Runciman). I wanted to emphasize its use in understanding your own program, along the lines of Wand's Continuation-Based Program Transformation Strategies (JACM 1980).
F. Pottier, and N. Gauthier. POPL '04: Proceedings of the 31st ACM SIGPLAN-SIGACT symposium on
Principles of programming languages, page 89--98. New York, NY, USA, ACM, (2004)
O. Danvy, and L. Nielsen. PPDP '01: Proceedings of the 3rd ACM SIGPLAN international conference
on Principles and practice of declarative programming, page 162--174. New York, NY, USA, ACM, (2001)