16 Touch Sensors - its working [code] but I wonder ...

volatile uint8_t* port;
volatile uint8_t* ddr;
volatile uint8_t* pin;

Why are these volatile? Are you expecting the values to change, in an interrupt, after being set in setup()?

I don't see your code using interrupts.

    for (uint8_t x=0; x<16; x++)
    {
      digitalWrite(2, bitRead(x,0)); digitalWrite(3, bitRead(x,1));
      digitalWrite(4, bitRead(x,2)); digitalWrite(5, bitRead(x,3));
      
      values[x] += readCapacitivePin();
    }

I don't see the value of multiple statements on one line. It makes the code much harder to read.

      if (buttons[x] == 99) { buttonEvent[x] = 2; buttonchanged = 1; }

Ditto here (and other places). What is the magic value 99 for? A #define with a meaningful name would be better.