How does Decimal Mode in an ALU work?
I don't know what logic the 6502 uses exactly, but many micros have a decimal adjust instruction that depends on having carry and nibble carry flags available. It is applied after a binary 8-bit addition. 

The logic works like this: 



If there's a nibble carry or if the LSD is > 9, add 0x06   ('or' the carry flag previous with new)

If there's a carry or if the MSD is > 9, add 0x60 and set carry. 



So if, for example:

add 0x43 and 0x39 in binary you get 0x7C with no nibble carry. 
Since LSD > 9, add 0x06 to give the result of 0x82 (no carry), which is the correct
packed BCD result. 

add 0x49 and 0x49 in binary you get 0x92 with a nibble carry
Since nibble carry, add 0x06 to give result of 0x92 (no carry)

add 0x50 and 0x50 n binary, you get 0xA0 with no nibble carry
Since MSD > 9, add 0x60 to give result 00 with carry. 

etc. 

Now, if you want do it in one step, you can easily make a BCD adder for packed two-digit BCD by combining two nibble BCD adders with a carry between, as seen here, which is just the logic I described above, but ripple-through rather than sequential. 



You could easily add some AND gates to the above circuit to make it dual mode (binary/decimal) as in the venerable 6502.