Am I supposed to create a child theme for every theme I use?

Child themes are not the only way to extend a theme, not even the best.

Many themes offer hooks: actions and filters. You can use these to change the output per plugin.

Let’s say you have a theme named Acme, and its index.php contains the following code:

get_header();

do_action( 'acme.loop.before', 'index' );
?>
    <div id="container">
        <div id="content" role="main">

            <?php
            /*
             * Run the loop to output the posts.
             * If you want to overload this in a child theme then include a file
             * called loop-index.php and that will be used instead.
             */
            get_template_part( 'loop', 'index' );
            ?>
        </div><!-- #content -->
    </div><!-- #container -->

<?php
do_action( 'acme.loop.after', 'index' );

do_action( 'acme.sidebar.before', 'index' );
get_sidebar();
do_action( 'acme.sidebar.after', 'index' );

get_footer();

Now you can write a small plugin to add wrappers (maybe for a second background image) around these specific areas:

add_action( 'acme.loop.before', function( $template ) {
    if ( 'index' === $template )
        print "<div class="extra-background">";
});

add_action( 'acme.loop.after', function( $template ) {
    if ( 'index' === $template )
        print "</div>";
});

Add other, separate plugins for other modifications.

This has four benefits:

  1. You can turn off the extra behavior in your plugin administration if you don’t want it anymore. In contrast to child themes, you do that for each plugin separately, you don’t have to turn every customization like you do when you have only one child theme.

  2. It is much faster than a child theme, because when WordPress is searching for a template and it cannot find it, it will search in both, child and parent themes. That cannot happen when there is no child theme.

  3. It is easier to debug when something goes wrong. With child themes, it is hard to see where an error is coming from, child or parent theme. Or both, that’s extra fun.

  4. Safe updates. Sometimes, when you update a parent theme, the child theme doesn’t work anymore, or worse: it works differently. It might even raise a fatal error, because you are using a function in the child theme that isn’t available in the parent theme anymore.

Summary: Use hooks whenever you can, use a child theme only if the parent theme doesn’t offer a good hook. Ask the theme author to add the missing hook. If you can offer a valid use case, I am sure s/he will implement it.