Over the summer I started a thread called "Turing Tarpit Programming Challenge" where I wrote several programs and with each further restricted the instructions I allowed. I concluded that the following 65c02 instructions and addressing modes allowed for a reasonably useful system.
Code:
Accumulator operations: and, ora, eor, adc, clc, inc, ror, and rol
Memory operations: lda #, lda absolute, lda (), sta absolute, and sta ()
Flow control instructions: bcc, bcs, beq, bne, jmp absolute, jmp (), jsr absolute, rts, and nop
That's 16 instructions, which is a notable reduction from the 6502's 56, and matches the PDP-8. I allowed absolute addressing because the 6502 is a byte machine and one or two byte operands are intrinsic to such a design. I also allowed the zero control bit because the PDP-8 had skip on zero.
Notable missing instructions are CMP, DEC, PHA, PLA, and SBC. Subtraction is done by adding the two's complement, and precomputed negative quantities. CMP is a nondestructive subtract, so you have to subtract and test for zero. DEC is achieved by adding negative one. This was actually common on early machines with a discrete logic ALU. The PDP-8 didn't have a stack, so I didn't allow its use for anything other than subroutine calls.
I was able to write a slow but usable Game of Life with those restrictions.