How can I hide my section title if there is no data in custom fields?

I would first loop over $lista and generate a new array of data that only has non-empty values. Now you can check $values to ensure there is data and output your title:

function opening_hours_custom_fields() {
    global $post;

    if ( $lista = genesis_get_custom_field( '_happy_day', $post->ID ) ) {
        $values = array();
        foreach ( $lista as $value ) {
            if ( $value != '' )
                $values[] = $value;
        }

        if ( $values ) {
            echo '<h3>Happy Day</h3>';
            echo '<ul>';
            foreach ( $values as $value )
                echo "<li>$value</li>";
            echo '</ul>';
        }
    }
}