Triple Shift Register question

Why is a function call more clunky than what you wished for ?
You wanted

digitalWrite(latch, 0);
  shiftOut(data, clock, MSBFIRST, 0, 16, 0);
  digitalWrite(latch, 1);

That is surely more clunky than the function call that I suggested

shift3(0,16,0);

As others have said, the time taken for the code to run should not be a cosideration in the case of your application

As to passing a function the name of a function to be executed, why bother ? Why not just call the function directly ? Alternatively pass a parameter to the pour() function which indicates the name of the function to be called so that you can easily see what you expect the function to do, which seems to be what you want and have the pour() function use switch/case based on the parameter to determine what should happen. If you put the drink names in an enum you can use meaningful names for the drinks for switch/case.

Something like this

enum drinkList {vodka, gandt, drink3};

void setup() 
{
  Serial.begin(9600);
  enum drinkList drink;

  pour(vodka);
  pour(drink3);
  pour(gandt);
}

void loop() 
{
}

void pour(int drink)
{
  switch (drink)
  {
  case vodka:
    pour_vodka();
    break;

  case gandt:
    pour_gandt();
    break;
  case drink3:
    pour_drink3();
    break;
  }
}

void pour_vodka()
{
  Serial.println("actions to pour vodka go here"); 
}

void pour_gandt()
{
  Serial.println("actions to pour Gin and Tonic go here"); 
}

void pour_drink3()
{
  Serial.println("actions to pour drink 3 go here"); 
}

This being C there is a way to pass a function name directly to a function but I can understand the code as written above because I wrote it ! See How do you pass a function as a parameter in C? - Stack Overflow for passing function names to functions.