Perl 5, 87 bytes
sub f{$_=pop;/(.)(.+)/?do{my$s=$1;map s/@_\d+/0+$&/ger,map{("$s $_",$s.$_)}f(1,$2)}:$_}
Ungolfed:
sub f {
$_ = pop; # set $_ to input (last arg)
if( /(.)(.+)/ ) { # if input two or more digits, split
# into start digit and rest
my $s = $1; # store start digit
return
map s/@_\d+/0+$&/ger, # no @_ => 1st recursive level => trim leading 0s
# 0+$& means int(digits matched)
map { ("$s $_", "$s$_") } # return "start+space+rest" and "start+rest"...
f(1, $2) # ...for every result of rest
# (1 marks recursive level below first)
}
else {
return $_ # if just one digit, return that
}
}
Perl 5 -MList::Util, 68 bytes
...which is further golfed from the answer from @xcali
say uniq map"@F
"=~s| |$_/=2;','x($_%2)|reg=~s|\d+|$&*1|reg,1..2**@F