Actually Cindys web engine Cindy::Apache2 (requires mod_perl) is language independent. It takes XML data that can be produced by an apache request handler (static, php, ...) and moves them into a template.
How to move the data is specified in a content injection sheet. This has a <source xpath> action <target xpath> syntax to describe data movements.
This may even qualify as strict separation. I'll check if my module (Cindy, see also http://www.heute-morgen.de/site/10_About.shtml) is actually Parr strict.