It is doable if you force yourself to adhere to a specific model of doing things.
I wrote a (yet unpublished to CPAN) module called "QWizard" that lets you write "wizard" screens that do complex sets of interrelated web pages easily. You define your questions to ask of the user (or things to just display, whatever) and code that acts on those questions (perl). When you write it using the generic widget building set (HASH descriptions), it will display it for you. We have used no HTML in the GUI part of net-policy, which is where these modules live currently, and the result is that the interface works under both HTML and Perl/tk without modification. new backends can be done at will as well (I have a half-working curses version). but, you have to conform to "how the screens are intended to look" (though its really flexible).
The advantage of Qwizard in particular is that you can write a CGI script that works asa HTML display when run from apache, and the same script when executed from the command line runs as a TK window without any modification...