Creating a full site package
What you are wanting to create is a Drupal Installation Profile. This is a method of packaging together multiple Drupal contributed modules and/or themes, plus potentially custom code and functionality, into a neat package that can be distributed and installed with the same resulting "full" website every time.

You'll want to refer to the drupal.org documentation on building installation profiles to get the basics behind how this is done.

Also very helpful will be the Features module. Features allows you to easily package together different sets of Drupal configurations, such as content types, views, and system variables. There are many different documentation and tutorial resources for Features. This is a good video tutorial on the basic concepts of Features.

There are a lot of additional extensions for Features that will help you package additional items into a Feature, such as node content, taxonomy terms, theme settings, etc.

In addition, some of the work you want to do in your installation profile (re: "populate the database with the data as well...") may need to be executed within custom code - either a custom module or as part of your installation profile's install tasks and/or install script. You can even set up a form to allow users to choose from a set of options during the installation.