You've got the general idea. The development environment consists of (typically) a hardware definition language (#vhdl or #verilog), and a toolchain (usually vendor specific, though there are some open source ones) that synthesizes the code into a logic equation list. And finally a toolchain that takes that netlist and maps it into the individual small discrete functions and configures the routing between them.
There is volatile memory on the device that stores the current configuration and must be loaded (many ways) on power up. There are a few models that have non-volatile memory that stores the configuration and loads itself. In high radiation environments, there are even fewer (and very expensive) models that have write-once-non-volatile memory for configuration.
I don't think your idea of using them as a generic purpose drop in replacement for things is particularly a good idea. The board environment is honestly more important than what you're doing in logic.