Вы можете легально и переносимо получить доступ к первому члену структуры, не используя его имя, просто приведя структуру к типу первого члена.
typedef struct {
int x;
} mystruct;
mystruct s;
*(int*)&s = 3;
Вы также можете переносить, но с практически 100% надежностью, доступ к любому полю в структуре без использования его имени, приведя структуру к другому типу структуры с совместимой структурой.
typedef struct {
int x;
char y;
} mystruct;
typedef struct {
int a;
char b;
} otherstruct;
mystruct s;
((otherstruct*)&s)->b = 'C';
Боюсь, это означает, что ни поиск источника по имени поля, ни его удаление не являются полностью надежными.