Check for example Lustre/Scade: http://www.esterel-technologies.com/ or its more recent successor Lucid synchrone: http://www.di.ens.fr/~pouzet/lucid-synchrone/
The latter has explicit recursion which can be disabled when designing embedded systems.
Haskell libraries closely follow this paradigm with their functional reactive DSLs. Recursion is actually useful to recursively define circuits with repeated patterns, e.g., the butterfly FFT.
Could you elaborate on this? Depending on what you mean, I might have a direct counter-example.
* a gate,
* a circuit that takes two inputs and produces two outputs by swapping the order,
* a circuit that takes one input and produces one output,
* a circuit that takes one input and produces no outputs,
* the circuit obtained by taking two circuits and composing them in serial,
* the circuit obtained by taking two circuits and composing them in parallel.
This produces a simple inductive definition for combinational circuits. Synchronous, sequential circuits can be obtained by taking a combinational circuit and connecting the first n outputs to the first n inputs via D flip-flops. If you want asynchronous circuits, you can add another combinator that takes a circuit and a connects the first n outputs to the first n inputs without the flip-flops.
With these definitions, it's quite straight forward to manipulate circuits in a functional manner.