Luke:
Awesome.
Actually, I'd recommend one change to your approach: I would have the JSP page callout to a web script, which can execute any server-side Javascript to marshall the data you need and then use a Freemarker template to generate the output. This is the direction we'll be taking for our library of pre-built web components (of course, what you are doing is just fine too).
For your other questions:
* A Web Form is a defined type managed within the Data Dictionary. A
Web Form is an XSD we use to generate on-the-fly an XForm for data
capture; it is associated with 0 to n output templates (for static content
pre-compilation). Web Forms are subscribed to by one or more
Web Projects, which customize the Web Form for use as part of their
site (what templates to apply, what workflow rules to enforce, etc.)
* A Web Form accessed in a Web Project is designed to solely generate
XML. That generated XML should include both your content and
your metadata. If you have common metadata across XSDs, you can
use an xs:include to have shared metadata definition across all your
content types.
* In your case, you are not statically pre-compiling any pages or
fixed assets (other XML flavors or a PDF). Thus, the Freemarker
template you call directly from your web page (or ideally via a
web script) is responsible for generating your content dynamically
at run-time.
If you do use web scripts, do note our new support in 2.1.0 Community Final for indexing specific field and metadata values from within an XML using an XMLMetadataExtractor. This enables data within the XML itself to be queryable via our Lucene Search index. You'll also want to browse up on Web Scripts in general, our JavaScript and Templating API, and our XMLMetadataExtractor support.
Cheers. Keep us posted of your progress!
Kevin