At first I thought that the main problem was not that you too slow at sampling, but that you were too slow at transmitting the data. As Edgar already stated, at 9600 b/s you need 22.88ms to send a line, so the maximum frequency is less than 50Hz.
However as you experienced, the speed you are getting is 200Hz. This is because that calculation is right in the case of a real serial interface. Arduino Leonardo, on the other hand, emulates the serial interface. But.. There is no such thing as baud rate. If you look at the CDC emulation source code you will see that the baud rate you pass to the begin function is ignored.
So... Why is it still slow? Because you are using the delay function! You are waiting for 1ms every time you perform an acquisition, and then you still have to perform all the sending. This has two errors embedded: 1) using the delay function breaks the timing - better use a timer - and 2) you are too slow.
Now, if you want a 1kHz sampling (or any delay multiple of 1ms) you already have a timer running (so you can just use that):
#define SAMPLE_EVERY_MS 1
unsigned long previousMillis;
void loop()
{
unsigned long currentMillis = millis();
if ((currentMillis - previousMillis) >= SAMPLE_EVERY_MS)
{
previousMillis += SAMPLE_EVERY_MS;
int val_a0 = analogRead(A0);
int val_a1 = analogRead(A1);
int val_a2 = analogRead(A2);
int val_a3 = analogRead(A3);
Serial.print(((double)currentMillis) / 1000, 1); // 1 is the number of decimals to print
Serial.print('\t');
Serial.print(val_a0);
Serial.print('\t');
Serial.print(val_a1);
Serial.print('\t');
Serial.print(val_a2);
Serial.print('\t');
Serial.println(val_a3);
}
}
Change just the define to reduce the sample time. The t variable is not needed anymore.
Just a side note: this will also fix the bug in your code that prevents the program to display the current timing (instead of printing 2.5 it prints 2.0).
If you need a faster sample rate you should use another timer to get the correct timing, but again avoid delays.