Por supuesto. Esta es una técnica común conocida como supertyping mesas. Como en su ejemplo, la idea es que una tabla contenga un superconjunto de entidades y tenga atributos comunes que describan una entidad general, y otras tablas contengan subconjuntos de esas entidades con atributos específicos. No es diferente a una jerarquía de clases simple en el diseño orientado a objetos.
Para su segunda pregunta, una tabla puede tener dos columnas que son claves externas separadas para la misma otra tabla. Cuando la base de datos genera la consulta, se une a esa otra tabla dos veces. Para ilustrar en una consulta SQL (no estoy seguro acerca de la sintaxis de MySQL, no la he usado en mucho tiempo, por lo que esta es específicamente la sintaxis de MS SQL), le daría a esa tabla dos alias distintos al seleccionar datos. Algo como esto:
SELECT
student_accounts.name AS student_name,
counselor_accounts.name AS counselor_name
FROM
student_rec
INNER JOIN user_accounts AS student_accounts
ON student_rec.student_number = student_accounts.user_id
INNER JOIN user_accounts AS counselor_accounts
ON student_rec.guidance_counselor_id = counselor_accounts.user_id
Esto esencialmente toma el student_rec
y la combina con user_accounts
tabla dos veces, una en cada columna, y asigna dos alias diferentes al combinarlos para diferenciarlos.