CCK allows you to define arbitrary fields in a Drupal node. Each of those fields is configured with a particular type and input widget (select box, text field, checkboxes, etc), as well as weight (top-to-bottom presentation ordering). There's also stuff like default values, help text, text and location of labels - pretty much everything you'd need.
And if that is not enuf, Drupal also includes a wide array of hook functions including form_alter() which, along with some well-designed page/node templates and CSS styling, pretty much gives you capability to change virtually anything about the appearance of a node's presentation. All the other things you list - storing and retrieving form values is pretty much handled for free for you, which one would expect from any CMS.