You can do the multiplication in the repeated query of recursive with. This also avoids the need for the exp/ln trick:
with vehicle_build_structure(
part_no,
parent_part,
qty_per_assembly
)as(
select 'LORRY', '*', null
from dual
union -- if it makes things easier, you may substitute "null" for "1"
select 'AXLEA', 'LORRY', 3
from dual
union
select 'BRAKEPAD', 'AXLEA', 2
from dual
union
select 'WHEEL', 'AXLEA', 4
from dual
union
select 'CAR', '*', null
from dual
union
select 'AXLEB', 'CAR', 2
from dual
union
select 'BRAKEPAD', 'AXLEB', 2
from dual
union
select 'WHEEL', 'AXLEB', 2
from dual
), tree (
part_no, parent_part, qty_per_assembly, tot_qty, lvl
) as (
select part_no, parent_part, qty_per_assembly, 1 tot_qty, 1 lvl
from vehicle_build_structure v
where parent_part = '*'
union all
select v.part_no, v.parent_part, v.qty_per_assembly,
t.tot_qty * v.qty_per_assembly, lvl + 1
from tree t
join vehicle_build_structure v
on t.part_no = v.parent_part
) search depth first by part_no set seq
select lpad ( ' ', lvl, ' ' ) || part_no,
parent_part,
qty_per_assembly,
tot_qty, lvl, seq
from tree;
LPAD('',LVL,'')||PART_NO PARENT_PART QTY_PER_ASSEMBLY TOT_QTY LVL SEQ
CAR * <null> 1 1 1
AXLEB CAR 2 2 2 2
BRAKEPAD AXLEB 2 4 3 3
WHEEL AXLEB 2 4 3 4
LORRY * <null> 1 1 5
AXLEA LORRY 3 3 2 6
BRAKEPAD AXLEA 2 6 3 7
WHEEL AXLEA 4 12 3 8