Do something like this.
// your shortcode callback
function your_sc_callback($atts,$content) {
$content = wp_list_pages(array('echo'=>false)).$content;
define('YOUR_SC_RAN',true);
return $content;
}
Now, in your theme template after the content prints
if (!defined('YOUR_SC_RAN')) {
wp_list_pages();
}
Or, you could do …
function append_list_pages($content) {
return $content.wp_list_pages(array('echo'=>false));
}
add_filter('the_content','append_list_pages',100);
And your shortcode callback would be …
function your_sc_callback($atts,$content) {
$content = wp_list_pages(array('echo'=>false)).$content;
remove_filter( 'the_content','append_list_pages',100 );
return $content;
}
Both or these are untested, so no guarantees, but I think either should work.