Is it possible to build a complete web site with Drupal 7 without using contributed modules or Hooks? Is it a good programming practice to add your own hooks in a template.tpl.php or is it best practice to make all the changes possible into a custom module?
It depends on the site's requirements. If you want to create a site only for content listing, you can simply change in template files to make it as per design. But you must keep your theme in sites/all/themes directory.

But generally the requirements are not so simple. The modules are contributed to make the better user experience. If you are asking this question for the better performance of site, then you should maintain your site with drupal standard.

The things to keep in mind :


Use contributed module rather than writing custom module.
In some case if you have to write custom module, then use drupal functions and API rather than core PHP functions.
Always keep your site (drupal/modules) updated with security releases.